// 分配菜单按钮权限 public void DistributionButton(EHECD_RoleDTO role) { var manager = DIEntity.GetInstance().GetImpl <IRoleManager>(); CreateSyslogInfo(); result.Succeeded = manager.DistributionMenuButton(role, RequestParameters.dynamicData) > 0; result.Msg = !result.Succeeded ? "" : "分配角色菜单按钮失败,请联系系统管理员"; }
/// <summary> /// 跳转到分配菜单按钮给角色页面 /// </summary> /// <param name="role"></param> /// <returns></returns> public PartialViewResult ToDistributionButton(EHECD_RoleDTO role) { ViewBag.TreeData = DI.DIEntity .GetInstance() .GetImpl <IRoleManager>() .LoadDistributionMenuButton(role); return(PartialView("DistributionButton")); }
//给角色分配菜单 public override int DistributionMenu(EHECD_RoleDTO role, dynamic dynamicData) { var ret = 0; var menusDynamic = dynamicData.data; if (menusDynamic.Count > 0) { //1.获取选中的菜单ID List <string> menus = JSONHelper.GetModel <List <string> >(menusDynamic.Parent.Value.ToString()); //2.获取角色已有菜单ID var roleMenus = query.QueryList <EHECD_FunctionMenuDTO>( @"SELECT sPrivilegeAccessValue ID FROM EHECD_Privilege WHERE sPrivilegeMaster = 'role' AND sPrivilegeAccess = 'menu' AND sBelong = 'role' AND bIsDeleted = 0 AND bPrivilegeOperation = 0 AND sPrivilegeMasterValue = @ID;", new { ID = role.ID }) .Select(m => m.ID.ToString()).ToList(); //3.选取选中的和已有的交集用以更新或插入 var jm = menus.Union(roleMenus).ToList(); //4.选取已有的和选中的差集用以解除没有选中的菜单权限 var cm = roleMenus.Except(menus).ToList(); StringBuilder sb = new StringBuilder(); //分配权限 sb.Append(CreateDistributionMenuSql(jm, role.ID.ToString())); //移除取消了得权限 sb.Append(CreateUnDistributionMenuSql(cm, role.ID.ToString())); ret = excute.ExcuteTransaction(sb.ToString()); } else { //既然一个都没选中,那就取消这个角色的所有权限 ret = excute.Update("UPDATE EHECD_Privilege SET bIsDeleted = 1 WHERE sPrivilegeMaster = 'role' AND sPrivilegeMasterValue = @RID AND sBelong = 'role' AND sBelongValue = @RID AND sPrivilegeAccess = 'menu';", new { RID = role.ID }); } //记录系统日志 InsertSystemLog( dynamicData.sLoginName.ToString(), dynamicData.sUserName.ToString(), dynamicData.IP.ToString(), (Int16)(SYSTEM_LOG_TYPE.MODIFY | SYSTEM_LOG_TYPE.ADD | SYSTEM_LOG_TYPE.DELETE | SYSTEM_LOG_TYPE.ROLE | SYSTEM_LOG_TYPE.MENU), "系统用户分配角色菜单" + role.ID, role.ID.ToString(), ret > 0); return(ret); }
//载入分配角色菜单的tree数据 public override dynamic LoadDistributionMenu(EHECD_RoleDTO role) { try { //1.获取所有菜单 var allMenus = query.QueryList <UserMenu>("SELECT * FROM EHECD_FunctionMenu WHERE bIsDeleted = 0;", null); //2.获取角色的菜单 var roleMenus = query.QueryList <UserMenu>(/*分配给角色的菜单特权*/ @"SELECT sPrivilegeAccessValue ID FROM EHECD_Privilege WHERE sPrivilegeMaster = 'role' AND sPrivilegeAccess = 'menu' AND sBelong = 'role' AND bIsDeleted = 0 --未删除的 AND bPrivilegeOperation = 0 --未禁用的 AND sPrivilegeMasterValue = @ID;", new { ID = role.ID }); //载入用户菜单层级关系 for (int i = 0; i < allMenus.Count; i++) { if (allMenus[i].sPID == null) { allMenus[i].ChildMenu = LoadMenuData(allMenus, allMenus[i]).OrderBy(m => m.iOrder).ToList(); } } //排个序 allMenus = allMenus.OrderBy(x => x.iOrder).ToList(); //创建菜单数据 var ret = allMenus.Where(m => m.sPID == null).Select(o => new { id = o.ID, text = o.sMenuName, children = CreateChidrenMenuTreeData(o.ChildMenu, roleMenus) }).ToList(); return(JSONHelper.GetJsonString <dynamic>(ret)); } catch (Exception) { return(null); } }
//编辑角色 public override int EditRole(EHECD_RoleDTO role, dynamic p) { //1.完善角色信息 role.dModifyTime = DateTime.Now; //2.更新角色信息 var ret = excute.UpdateSingle <EHECD_RoleDTO>(role, string.Format("where ID = '{0}'", role.ID.ToString())); //3.记录系统日志 InsertSystemLog( p.sLoginName.ToString(), p.sUserName.ToString(), p.IP.ToString(), (Int16)(SYSTEM_LOG_TYPE.MODIFY | SYSTEM_LOG_TYPE.ROLE), "系统用户编辑角色" + role.ID, role.ID.ToString(), ret > 0); return(ret); }
//添加角色 public override int AddRole(dynamic data, dynamic p) { //1.创建角色对象 EHECD_RoleDTO role = new EHECD_RoleDTO { ID = GuidHelper.GetSecuentialGuid(), bEnable = Convert.ToBoolean(data.bEnable.Value), bIsDeleted = false, dCreateTime = DateTime.Now, dModifyTime = DateTime.Now, iOrder = Convert.ToInt32(data.iOrder.Value), sRoleName = data.sRoleName.Value }; var sqlIf = @"IF EXISTS(SELECT 1 FROM EHECD_Role WHERE sRoleName = @sRoleName) BEGIN SELECT -1 RET; END ELSE BEGIN {0} END;"; sqlIf = string.Format(sqlIf, DBSqlHelper.GetInsertSQL <EHECD_RoleDTO>(role)); //2.插入角色信息 var ret = excute.Insert(sqlIf, new { sRoleName = role.sRoleName }); //3.记录系统日志 InsertSystemLog( p.sLoginName.ToString(), p.sUserName.ToString(), p.IP.ToString(), (Int16)(SYSTEM_LOG_TYPE.ADD | SYSTEM_LOG_TYPE.ROLE), "系统用户添加角色" + role.ID, role.ID.ToString(), ret > 0); return(ret); }
//给角色分配菜单按钮 public override int DistributionMenuButton(EHECD_RoleDTO role, dynamic dynamicData) { var ret = 0; var btnData = dynamicData.data; if (btnData.Count > 0) { //1.选中的按钮的ID var bts = JSONHelper.GetModel <dynamic>(btnData.Parent.Value.ToString()).GetEnumerator(); var btnsDy = new List <object>(); while (bts.MoveNext()) { btnsDy.Add(new { id = bts.Current.id.ToString(), menuid = bts.Current.menuid.ToString() }); } //var btsid = bts.Select(m => m.id.Value.ToString()).ToList(); //2.获取角色已有的按钮ID var roleBtnIds = query.QueryList <Dictionary <string, object> >( @" SELECT sPrivilegeAccessValue id, sBelongValue menuid FROM EHECD_Privilege WHERE sPrivilegeMaster = 'role' AND sBelong = 'menu' AND sPrivilegeAccess = 'button' AND bIsDeleted = 0 AND sPrivilegeMasterValue = @ID;", new { ID = role.ID } ).Select(m => new { id = m["id"].ToString(), menuid = m["menuid"].ToString() }).ToList(); //3.获取交集用以更新和插入 var jb = btnsDy.Union(roleBtnIds, new ButtonMenuRoleCompare()).ToList(); ////4.获取差集用以解除没有选中的按钮权限 var cb = roleBtnIds.Except(btnsDy, new ButtonMenuRoleCompare()).ToList(); StringBuilder sb = new StringBuilder(); //分配权限 sb.Append(CreateDistributionButtonSql(jb, role.ID.ToString())); ////移除取消了得权限 sb.Append(CreateUnDistributionButtonSql(cb, role.ID.ToString())); ret = excute.ExcuteTransaction(sb.ToString()); } else { //没有选中只能认为是要取消所有按钮权限了 ret = excute.Update("UPDATE EHECD_Privilege SET bIsDeleted = 1 WHERE sPrivilegeMaster = 'role' AND sPrivilegeMasterValue = @RID AND sBelong = 'role' AND sBelongValue = @RID AND sPrivilegeAccess = 'button';", new { RID = role.ID }); } //记录系统日志 InsertSystemLog( dynamicData.sLoginName.ToString(), dynamicData.sUserName.ToString(), dynamicData.IP.ToString(), (Int16)(SYSTEM_LOG_TYPE.MODIFY | SYSTEM_LOG_TYPE.ADD | SYSTEM_LOG_TYPE.DELETE | SYSTEM_LOG_TYPE.ROLE | SYSTEM_LOG_TYPE.BUTTON), "系统用户分配角色菜单按钮" + role.ID, role.ID.ToString(), ret > 0); return(ret); }
//载入分配菜单按钮的tree数据 public override dynamic LoadDistributionMenuButton(EHECD_RoleDTO role) { try { #region 1.获取角色的菜单 //1.获取角色的菜单 var roleMenus = query.QueryList <UserMenu>( @"WITH CTE (ID) AS ( SELECT sPrivilegeAccessValue ID FROM EHECD_Privilege WHERE sPrivilegeMaster = 'role' AND sPrivilegeAccess = 'menu' AND sBelong = 'role' AND bIsDeleted = 0 AND bPrivilegeOperation = 0 AND sPrivilegeMasterValue = @ID )SELECT A.ID,A.sMenuName,A.sPID,A.iOrder FROM EHECD_FunctionMenu A,CTE WHERE CTE.ID = A.ID;", new { ID = role.ID }); #endregion #region 2.获取角色菜单按钮 //2.获取角色菜单按钮 var roleMenuButtons = query.QueryList <UserMenuButton>( @"WITH CTE (ID) AS ( SELECT sPrivilegeAccessValue ID FROM EHECD_Privilege WHERE sPrivilegeMaster = 'role' AND sPrivilegeAccess = 'button' AND sBelong = 'menu' AND bIsDeleted = 0 AND bPrivilegeOperation = 0 AND sPrivilegeMasterValue = @ID ) SELECT A.ID, A.sButtonName FROM EHECD_MenuButton A, CTE WHERE CTE.ID = A.ID;" , new { ID = role.ID.ToString() } ); #endregion #region 3.获取所有菜单的按钮 //4.获取所有菜单的按钮 var allMenuButtons = query.QueryList <Dictionary <string, object> >( @"WITH CTE (ID,sBelongValue) AS ( SELECT sPrivilegeAccessValue ID,--按钮ID sBelongValue FROM EHECD_Privilege WHERE sPrivilegeMaster = 'menu' AND sPrivilegeAccess = 'button' AND sBelong = 'menu' AND bIsDeleted = 0 AND bPrivilegeOperation = 0 ) SELECT A.ID, A.sButtonName, A.iOrder, A.sIcon, CTE.sBelongValue sDataID--临时用sDataID装一下 FROM EHECD_MenuButton A, CTE WHERE CTE.ID = A.ID;" , null ); #endregion #region 4.整理菜单的层级关系 //5.整理菜单的层级关系 for (int i = 0; i < roleMenus.Count; i++) { //添加按钮 for (int j = 0; j < allMenuButtons.Count; j++) { if (roleMenus[i].ID.ToString() == allMenuButtons[j]["sDataID"].ToString()) { roleMenus[i].Buttons.Add(new UserMenuButton { ID = Guid.Parse(allMenuButtons[j]["ID"].ToString()), sButtonName = allMenuButtons[j]["sButtonName"].ToString(), iOrder = allMenuButtons[j]["iOrder"].ToInt32(), sIcon = allMenuButtons[j]["sIcon"].ToString() }); } } //整理菜单层级关系 if (roleMenus[i].sPID == null) { roleMenus[i].ChildMenu = LoadMenuData(roleMenus, roleMenus[i]).OrderBy(m => m.iOrder).ToList(); } } #endregion #region 5.创建菜单的树结构数据 var ret = roleMenus.Where(m => m.sPID == null).Select(o => new { id = o.ID, text = o.sMenuName, @checked = false, attributes = new { isLeaf = false }, children = CreateChidrenMenuButtonTreeData(o.ChildMenu, roleMenuButtons) }).ToList(); #endregion return(JSONHelper.GetJsonString(ret)); } catch (Exception) { return(null); } }
/// <summary> /// 分配角色菜单按钮 /// </summary> /// <param name="role">角色</param> /// <param name="dynamicData">数据</param> /// <returns>分配结果</returns> public abstract int DistributionMenuButton(EHECD_RoleDTO role, dynamic dynamicData);
/// <summary> /// 载入分配角色的菜单按钮tree数据 /// </summary> /// <param name="role">角色</param> /// <returns>tree数据</returns> public abstract dynamic LoadDistributionMenuButton(EHECD_RoleDTO role);
/// <summary> /// 编辑角色信息 /// </summary> /// <param name="role">角色对象</param> /// <param name="p">插入系统操作日志需要的动态参数</param> /// <returns>编辑结果</returns> public abstract int EditRole(EHECD_RoleDTO role, dynamic p);
/// <summary> /// 跳转到编辑角色页面 /// </summary> /// <param name="role"></param> /// <returns></returns> public PartialViewResult ToEditRole(EHECD_RoleDTO role) { return(PartialView("EditRole", role)); }