/// <summary> /// 获取角色菜单 /// </summary> /// <param name="roleUid"></param> /// <returns></returns> public IEnumerable <FapRoleMenu> GetRoleMenus(string roleUid) { return(_rbacService.GetRoleMenuList(roleUid)); }
public IEnumerable <TreeDataView> GetModuleAndMenuTree() { var menus = _platformDomain.MenuSet.ToList(); if (!_applicationContext.IsAdministrator) { var roleMenus = _rbacService.GetRoleMenuList(_applicationContext.CurrentRoleUid); if (roleMenus.Any()) { var roleUids = roleMenus.Select(m => m.MenuUid); menus = menus.Where(m => roleUids.Contains(m.Fid)).ToList(); } } List <TreeDataView> moduleList = _platformDomain.ModuleSet .Where(m => menus.Select(m => m.ModuleUid).Distinct().Contains(m.Fid)) .Select(t => new TreeDataView { Id = t.Fid.ToString(), Data = new { IsMenu = false }, Pid = t.Pid.ToString(), Text = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Module, t.Fid), State = new NodeState { Opened = false }, Icon = (t.Icon.IsMissing() ? "icon-folder green ace-icon fa fa-leaf" : "icon-folder green ace-icon " + t.Icon) }).ToList <TreeDataView>(); //授权 仅仅授予到二级菜单 List <TreeDataView> menuList = menus.Where(m => m.MenuCode.Length == 5).Select(r => new TreeDataView { Id = r.Fid.ToString(), Data = new { IsMenu = true }, Pid = r.ModuleUid, Text = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Menu, r.Fid), State = new NodeState { Opened = false }, Icon = "icon-folder orange ace-icon fa fa-leaf" }).ToList <TreeDataView>(); List <TreeDataView> threeLevels = menus.Where(m => m.MenuCode.Length == 7).Select(r => new TreeDataView { Id = r.Fid.ToString(), Data = new { IsMenu = true }, Pid = r.Pid, Text = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Menu, r.Fid), State = new NodeState { Opened = false }, Icon = "icon-folder orange ace-icon fa fa-leaf" }).ToList <TreeDataView>(); List <TreeDataView> tree = new List <TreeDataView>(); List <TreeDataView> treeRoots = moduleList.Where(g => g.Pid == "0").ToList(); foreach (var treeRoot in treeRoots) { TreeViewHelper.MakeTree(treeRoot.Children, moduleList, treeRoot.Id); } tree.AddRange(treeRoots); foreach (var item in tree) { var rl = menuList.Where <TreeDataView>(r => r.Pid == item.Id); if (rl.Any()) { foreach (var r2 in rl) { //三级菜单 if (threeLevels != null && threeLevels.Any()) { var rl3 = threeLevels.Where(m => m.Pid == r2.Id); if (rl3 != null && rl3.Any()) { r2.Children.AddRange(rl3); //foreach (var r3 in rl3) //{ // r2.Children.Add(r3) //} } } } item.Children.AddRange(rl); } } return(tree); }
private List <MenuItem> BuildMenus() { //经理自主模块Fid string mgrModuleUid = "23b611e6b65e40b5abc8"; List <MenuItem> menus = new List <MenuItem>(); List <FapMenu> threeLevel = new List <FapMenu>(); List <FapModule> modules = new List <FapModule>(); //判断是否为部门负责人或者经理 DynamicParameters param = new DynamicParameters(); param.Add("EmpUid", _applicationContext.EmpUid); int mi = _dataAccessor.Count("OrgDept", "Director=@EmpUid or DeptManager=@EmpUid", param); //获取权限菜单 IEnumerable <FapRoleMenu> roleMenuUids = _rbacService.GetRoleMenuList(_applicationContext.CurrentRoleUid); if (roleMenuUids.Any()) { List <FapMenu> roleMenus = new List <FapMenu>(); foreach (var rm in roleMenuUids) { FapMenu fm; if (_appDomain.MenuSet.TryGetValue(rm.MenuUid, out fm)) { //经理自助菜单权限 只有部门经理或者负责人具有 if (mi == 0 && fm.ModuleUid == mgrModuleUid) { continue; } if (fm.MenuCode.Length > 5) { //如果没有二级菜单授权,这里要加上。 string parentCode = fm.MenuCode.Substring(0, 5); if (!roleMenus.Exists(m => m.MenuCode == parentCode)) { var pmenu = _appDomain.MenuSet.FirstOrDefault <FapMenu>(m => m.MenuCode == parentCode); if (pmenu != null) { roleMenus.Add(pmenu); } } } if (!roleMenus.Contains(fm)) { roleMenus.Add(fm); } } } var roleMenusOrder = roleMenus.OrderBy(m => m.MenuOrder); foreach (var fm in roleMenusOrder) { //仅仅处理二级菜单 if (fm.MenuUrl.IsMissing()) { continue; } if (fm.ActiveFlag == 0) { continue; } if (fm.MenuCode.Length > 5) { threeLevel.Add(fm); continue; } string menuText = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Menu, fm.Fid); MenuItem fmm = new MenuItem { Text = menuText, Value = fm.MenuCode, NavigateUrl = Url.Content(fm.MenuUrl), ToolTip = fm.BadgePlusClass }; FapModule fmd; //是模块的时候 if (_appDomain.ModuleSet.TryGetValue(fm.ModuleUid, out fmd)) { MenuItem mmd = null; menuText = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Module, fmd.Fid); if (!modules.Contains(fmd)) { modules.Add(fmd); mmd = new MenuItem { Text = menuText, NavigateUrl = "", Value = fmd.ModuleCode, ImageUrl = fmd.Icon, Target = fmd.ModuleOrder.ToString() }; mmd.ChildItems.Add(fmm); menus.Add(mmd); } else { mmd = menus.Find(m => m.Text == menuText); mmd.ChildItems.Add(fmm); } } } } //管理员账号 增加系统管理菜单 if (_applicationContext.UserName == FapPlatformConstants.Administrator) { //检查系统菜单,如果有就移除 var sysModule = _appDomain.ModuleSet.FirstOrDefault(m => m.ModuleCode == "099"); if (sysModule != null) { var sysMenu = menus.Find(m => m.Value == sysModule.ModuleCode); if (sysMenu != null) { menus.Remove(sysMenu); modules.Remove(sysModule); } } //重新增加系统菜单 IEnumerator <FapMenu> ms = _appDomain.MenuSet.Where(m => m.MenuCode.StartsWith("099")).OrderBy(m => m.MenuOrder).GetEnumerator(); while (ms.MoveNext()) { FapMenu fm = ms.Current; if (fm.ActiveFlag == 0) { continue; } //仅仅处理二级菜单 if (fm.MenuUrl.IsMissing()) { continue; } if (fm.MenuCode.Length > 5) { threeLevel.Add(fm); continue; } string mx = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Menu, fm.Fid); //菜单 MenuItem fmm = new MenuItem { Text = mx, NavigateUrl = Url.Content(fm.MenuUrl), Value = fm.MenuCode, ToolTip = fm.BadgePlusClass }; FapModule fmd; if (_appDomain.ModuleSet.TryGetValue(fm.ModuleUid, out fmd)) { mx = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Module, fmd.Fid); if (!modules.Contains(fmd)) { modules.Add(fmd); //模块 MenuItem mmd = new MenuItem { Text = mx, NavigateUrl = "", ImageUrl = fmd.Icon, Value = fmd.ModuleCode, Target = fmd.ModuleOrder.ToString() }; mmd.ChildItems.Add(fmm); menus.Add(mmd); } else { menus.Find(m => m.Text == mx).ChildItems.Add(fmm); } } } } //处理三级菜单 if (threeLevel.Any()) { var threeMenus = threeLevel.OrderBy(m => m.MenuOrder); foreach (var menu in threeMenus) { //找到所在的模块 var module = menus.Find(m => menu.MenuCode.StartsWith(m.Value)); if (module != null && module.ChildItems != null && module.ChildItems.Count > 0) { foreach (MenuItem item in module.ChildItems) { if (menu.MenuCode.StartsWith(item.Value) && item.Value.Length == 5) { string mx = _multiLangService.GetMultiLangValue(MultiLanguageOriginEnum.Menu, menu.Fid); MenuItem fmm = new MenuItem { Text = mx, Value = menu.MenuCode, NavigateUrl = Url.Content(menu.MenuUrl), ToolTip = menu.BadgePlusClass }; item.ChildItems.Add(fmm); break; } } } } } return(menus); }