protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); if (Session["UserInfo"] != null) { userInfo = (UserInfo)Session["UserInfo"]; ViewData["UserInfo"] = userInfo; } if (Session["screenResult"] != null) { screenResult = (ScreenResultModel)Session["screenResult"]; } else { screenResult = new ScreenResultModel(1, "", Accessibility.Public, TempletType.WordTemplet); Session["screenResult"] = screenResult; } if (Session["modifyScreenResult"] != null) { modifyScreenResult = (ScreenResultModel)Session["modifyScreenResult"]; } else { modifyScreenResult = new ScreenResultModel(1, "", Accessibility.Private, TempletType.WordTemplet); Session["modifyScreenResult"] = modifyScreenResult; } if (Session["UserInfo"] == null && Request.Path != "/Home/Index" && Request.Path != "/Home/AddonDownload" && Request.Path.Contains("/Home/")) { filterContext.Result = Redirect("/Home/Index"); } }
private async Task FullList(ScreenResultModel screen) { templets = await WebHelper.GetJson <ScreenResultModel, List <TempletForJson> >(screen, FormFactory.userMsg.IPAddress + "/JsonAPI/GetList"); lstTemp.Invoke(new Action(() => { lstTemp.Items.Clear(); foreach (TempletForJson templet in templets) { lstTemp.Items.Add(templet.TempletName); } })); }
private async void TempletList_Load(object sender, EventArgs e) { if (!Enum.TryParse(tmpType, out TempletType type)) { MessageBox.Show("模板类型不正确"); Close(); return; } if (!Enum.TryParse(tmpAccess, out Model.Accessibility access)) { MessageBox.Show("模板权限信息不正确"); Close(); return; } screen = new ScreenResultModel() { TokenValue = FormFactory.JWTToken.TokenValue, TempletType = type, Accessable = access, PageIndex = 1, StateCode = StateCode.request }; await FullList(screen); }
public ActionResult GetList(ScreenResultModel screen) { UserForTemplet user = new ValidateToken().CheckUser(screen.TokenValue); if (user.StateCode != StateCode.normal) { return(Json(new List <TempletForJson>() { new TempletForJson() { StateCode = user.StateCode, StateDescription = user.StateDescription } })); } IQueryable <BaseTemplet> templets = util.GetScreenResult(user, screen, int.MaxValue, out int totalcount); //根据筛选条件查询结果 List <BaseTemplet> temp = templets.ToList(); //由于直接使用IQueryable赋值会抛出DataReader未释放的异常,故先转换为List。推测是IQueryable的数据库访问是用时查询,缺少异步封装导致的(就是懒得写异步了) List <TempletForJson> result = new List <TempletForJson>(); //由于外键链接,直接使用Json实例化查询结果会导致重复引用,所以这里建立新模型以方便Json传输 foreach (BaseTemplet templet in temp) { result.Add(new TempletForJson() { ID = templet.ID, UserID = templet.User.ID, Organization = templet.Organization == null ? new Guid() : templet.Organization.ID, Accessibility = templet.Accessibility, TempletName = templet.TempletName, TempletIntroduction = templet.TempletIntroduction, ImagePath = templet.ImagePath, FilePath = templet.FilePath, ModTime = templet.ModTime, StateCode = StateCode.normal, StateDescription = "获取成功" }); } return(Json(result)); }
/// <summary> /// 通过筛选对象筛选数据信息 /// </summary> /// <param name="user">用户信息</param> /// <param name="screenResult">筛选选项</param> /// <param name="pageCount">每页记录条数</param> /// <param name="totalCount">记录总数</param> /// <returns>查询到的记录集合</returns> public IQueryable <BaseTemplet> GetScreenResult(UserForTemplet user, ScreenResultModel screenResult, int pageCount, out int totalCount) { #region 初始化变量 Func <ParameterExpression, BinaryExpression> whereLambda; IQueryable <BaseTemplet> templets; int pageIndex = screenResult.PageIndex; pageIndex = pageIndex < 1 ? 1 : pageIndex; #endregion #region 判断筛选选项,动态构造lambda表达式 if (user == null) #region p=>p.Accessibility == Accessibility.Public { whereLambda = (parameter) => { BinaryExpression b = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Public)); return(b); } }; #endregion else if (screenResult.Accessable == Accessibility.Private) #region p=>p.Accessibility == Accessibility.Private && p.User.ID == userInfo.ID { whereLambda = (parameter) => { //p=>p.Accessibility == Accessibility.Private BinaryExpression query1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Private)); //p.User.ID == userInfo.ID MemberExpression e = Expression.PropertyOrField(parameter, "User"); MemberExpression e2 = Expression.PropertyOrField(e, "ID"); BinaryExpression query2 = Expression.Equal(e2, Expression.Constant(user.ID)); return(Expression.And(query1, query2)); } }; #endregion else if (user.OrganizationID == null || user.OrganizationID == new Guid()) #region p=>p.Accessibility == Accessibility.Public || (p.Accessibility == Accessibility.Private&&p.User.ID == userInfo.ID) { whereLambda = (parameter) => { //p=>p.Accessibility == Accessibility.Public BinaryExpression query1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Public)); //p.Accessibility == Accessibility.Private BinaryExpression query2_1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Private)); MemberExpression e = Expression.PropertyOrField(parameter, "User"); MemberExpression e2 = Expression.PropertyOrField(e, "ID"); //p.User.ID == userInfo.ID BinaryExpression query2_2 = Expression.Equal(e2, Expression.Constant(user.ID)); //p.Accessibility == Accessibility.Private&&p.User.ID == userInfo.ID BinaryExpression query2 = Expression.And(query2_1, query2_2); return(Expression.Or(query1, query2)); } }; #endregion else if (screenResult.Accessable == Accessibility.Protected) #region p=>p.Accessibility == Accessibility.Protected && p.Organization.ID == userInfo.Organization.ID { whereLambda = (parameter) => { //p=>p.Accessibility == Accessibility.Protected BinaryExpression query1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Protected)); MemberExpression e = Expression.PropertyOrField(parameter, "Organization"); MemberExpression e2 = Expression.PropertyOrField(e, "ID"); //p.Organization.ID == userInfo.Organization.ID BinaryExpression query2 = Expression.Equal(e2, Expression.Constant(user.OrganizationID)); return(Expression.And(query1, query2)); } }; #endregion else #region p.Accessibility == Accessibility.Public || (p.Accessibility == Accessibility.Private && p.User.ID == userInfo.ID) || (p.Accessibility == Accessibility.Protected &&p.Organization.ID == userInfo.Organization.ID ) { whereLambda = (parameter) => { //p=>p.Accessibility == Accessibility.Public BinaryExpression query1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Public)); //p.Accessibility == Accessibility.Private BinaryExpression query2_1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Private)); MemberExpression e = Expression.PropertyOrField(parameter, "User"); MemberExpression e2 = Expression.PropertyOrField(e, "ID"); //p.User.ID == userInfo.ID BinaryExpression query2_2 = Expression.Equal(e2, Expression.Constant(user.ID)); //p.Accessibility == Accessibility.Private && p.User.ID == userInfo.ID BinaryExpression query2 = Expression.And(query2_1, query2_2); //p.Accessibility == Accessibility.Protected BinaryExpression query3_1 = Expression.Equal(Expression.PropertyOrField(parameter, "Accessibility"), Expression.Constant(Accessibility.Protected)); e = Expression.PropertyOrField(parameter, "Organization"); e2 = Expression.PropertyOrField(e, "ID"); //p.Organization.ID == userInfo.Organization.ID BinaryExpression query3_2 = Expression.Equal(e2, Expression.Constant(user.OrganizationID)); //p.Accessibility == Accessibility.Protected &&p.Organization.ID == userInfo.Organization.ID BinaryExpression query3 = Expression.And(query3_1, query3_2); //p.Accessibility == Accessibility.Public || (p.Accessibility == Accessibility.Private && p.User.ID == userInfo.ID) BinaryExpression b = Expression.Or(query1, query2); return(Expression.Or(b, query3)); } }; #endregion #endregion #region 判断模板类型并取值 if (screenResult.TempletType == TempletType.PPTTemplet) { templets = ServiceSessionFactory.ServiceSession.PPTService.LoadEntityPage(pageIndex, pageCount, out totalCount, MakeWhereLambda <PPTTemplet>(whereLambda), w => w.TempletName, true); } else if (screenResult.TempletType == TempletType.ExcelTemplet) { templets = ServiceSessionFactory.ServiceSession.ExcelService.LoadEntityPage(pageIndex, pageCount, out totalCount, MakeWhereLambda <ExcelTemplet>(whereLambda), w => w.TempletName, true); } else if (screenResult.TempletType == TempletType.ImageTemplet) { templets = ServiceSessionFactory.ServiceSession.ImageService.LoadEntityPage(pageIndex, pageCount, out totalCount, MakeWhereLambda <ImageTemplet>(whereLambda), w => w.TempletName, true); } else if (screenResult.TempletType == TempletType.AudioTemplet) { templets = ServiceSessionFactory.ServiceSession.AudioService.LoadEntityPage(pageIndex, pageCount, out totalCount, MakeWhereLambda <AudioTemplet>(whereLambda), w => w.TempletName, true); } else if (screenResult.TempletType == TempletType.VideoTemplet) { templets = ServiceSessionFactory.ServiceSession.VideoService.LoadEntityPage(pageIndex, pageCount, out totalCount, MakeWhereLambda <VideoTemplet>(whereLambda), w => w.TempletName, true); } else { templets = ServiceSessionFactory.ServiceSession.WordTempletService.LoadEntityPage(pageIndex, pageCount, out totalCount, MakeWhereLambda <WordTemplet>(whereLambda), w => w.TempletName, true); } #endregion #region 判断搜索选项 if (!string.IsNullOrWhiteSpace(screenResult.Search)) { templets = from t in templets where (t.TempletName.Contains(screenResult.Search)) select t; totalCount = templets.Count(); } #endregion return(templets); }
/// <summary> /// 通过筛选对象筛选数据信息 /// </summary> /// <param name="user">用户信息</param> /// <param name="screenResult">筛选选项</param> /// <param name="totalCount">记录总数</param> /// <returns>查询到的记录集合</returns> public IQueryable <BaseTemplet> GetScreenResult(UserForTemplet user, ScreenResultModel screenResult, out int totalCount) { return(GetScreenResult(user, screenResult, 6, out totalCount)); }