public UserViewQuery(BizDataContext context, T_User currentUser) : base(context, currentUser) { this.KeyName = "User_ID"; this.EntityId = 1000000002; DefaultOperationManager manager = new DefaultOperationManager(context, currentUser); this.MaxQueryPrivilege = manager.TryCanOperation(currentUser.User_ID, this.EntityId, EntityOperationEnum.Query); }
protected void btnSaveAA_Click(object sender, EventArgs e) { var dataList = RoleOfEntityControl1.GetReptBindItem(); try { if (string.IsNullOrEmpty(this.ddlCategory.SelectedValue)) { return; } long CategoryId = Convert.ToInt64(this.ddlCategory.SelectedValue); string msg = string.Empty; //先清除该角色权限,然后添加当前设定的权限 using (BizDataContext Context = new BizDataContext()) { //var moduleList = Context.Where<SysModule>(p => p.CategoryId == CategoryId).Select(p => p.ModuleId).ToList(); var moduleList = this.EntityCache.SysModule.Where(p => p.CategoryId == CategoryId).Select(p => p.ModuleId).ToList(); //var entityList = Context.Where<SysEntity>(p => p.ModuleId != null) var entityList = this.EntityCache.SysEntity.Where(p => p.ModuleId != null) .Where(p => moduleList.Contains(p.ModuleId.Value)) .Select(p => p.EntityId); var delList = Context.Where <SysDataPrivilege>(x => x.RoleId == this.RoleId) .Where(x => entityList.Contains(x.EntityId)).ToList(); //delList.Clear(); foreach (var del in delList) { Context.Delete(del); } foreach (var add in dataList) { Context.Insert(new SysDataPrivilege() { EntityId = add.EntityId, OperationId = (int)EntityOperationEnum.Add, RoleId = this.RoleId, PrivelegeLevel = add.addRight }); Context.Insert(new SysDataPrivilege() { EntityId = add.EntityId, OperationId = (int)EntityOperationEnum.Delete, RoleId = this.RoleId, PrivelegeLevel = add.delRight }); Context.Insert(new SysDataPrivilege() { EntityId = add.EntityId, OperationId = (int)EntityOperationEnum.Update, RoleId = this.RoleId, PrivelegeLevel = add.updtRight }); Context.Insert(new SysDataPrivilege() { EntityId = add.EntityId, OperationId = (int)EntityOperationEnum.Query, RoleId = this.RoleId, PrivelegeLevel = add.queryRight }); } //1.无权限,2.个人,3.部门,4.部门及子部门,5.全部权限 //循环遍历所有实体表(即父实体) foreach (var reptBindItem in dataList) { //获取当前父实体的一对多关系 var sysOneMoreRelations = // Context.Where<SysOneMoreRelation>( this.EntityCache.SysOneMoreRelation.Where( p => p.ParentEntityId == reptBindItem.EntityId && p.IsParentChild == true); //循环所有一对多关系 foreach (var sysOneMoreRelation in sysOneMoreRelations) { //sysOneMoreRelation.ChildEntity = Context.FindById<SysEntity>(sysOneMoreRelation.ChildEntityId); //获取父实体的子实体的所有权限 var delChild = Context.Where <SysDataPrivilege>( x => x.RoleId == this.RoleId && sysOneMoreRelation.ChildEntityId == x.EntityId).ToList(); //删除子实体的所有权限 foreach (var sysDataPrivilege in delChild) { Context.Delete(sysDataPrivilege); } msg += string.Format("{0}为{1}的子实体,权限随{1}的权限而改变!\\n", sysOneMoreRelation.ChildEntity.DisplayText, reptBindItem.DisplayText); //判断子实体的授权方式 //1.个人类,在此情况下子实体无需担心父实体的授权方式,子实体所包含的权限(即上面5种)>=父实体所包含权限 //2.组织类(只含有无权限和全部权限),在此情况下需判断父实体所选择的权限(即上面5种之一),如果父实体选择无权限,子实体即无权限,否则子实体为全部权限 if (sysOneMoreRelation.ChildEntity.PrivilegeMode == (int)PrivilegeModel.Persional)//子实体为个人类 { //子实体的Add权限跟随父实体的Update权限,其余权限与父实体一一对应 Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Add, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.updtRight }); Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Delete, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.delRight }); Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Update, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.updtRight }); Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Query, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.queryRight }); } else//子实体为组织类 { if (reptBindItem.delRight == 1)//父实体对于删除选择无权限 { Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Delete, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.delRight }); } else { Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Delete, RoleId = this.RoleId, PrivelegeLevel = 5 }); } if (reptBindItem.updtRight == 1)//父实体对于更新选择无权限,子实体Add权限跟随父实体update权限 { Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Update, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.updtRight }); Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Add, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.updtRight }); } else { Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Update, RoleId = this.RoleId, PrivelegeLevel = 5 }); Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Add, RoleId = this.RoleId, PrivelegeLevel = 5 }); } if (reptBindItem.queryRight == 1)//父实体对于查询选择无权限 { Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Query, RoleId = this.RoleId, PrivelegeLevel = reptBindItem.queryRight }); } else { Context.Insert(new SysDataPrivilege() { EntityId = sysOneMoreRelation.ChildEntityId.Value, OperationId = (int)EntityOperationEnum.Query, RoleId = this.RoleId, PrivelegeLevel = 5 }); } } } } } IOperationManager dom = new DefaultOperationManager(this.DataHelper, this.LoginUser); int count = dom.ValidateSharedPrivilege(); if (count > 0) { msg = string.Format("{0},修改导致{1}条权限共享规则被移除", msg, count); } //清除菜单的缓存,2011-10-8 zhu min Session["T_Function"] = null; this.AjaxAlert("保存成功!\\n" + msg, "window.location.reload()"); } catch (Exception ex) { this.AjaxAlert(ex); } }