コード例 #1
0
 /// <summary>
 /// 获取角色菜单
 /// </summary>
 /// <param name="roleUid"></param>
 /// <returns></returns>
 public IEnumerable <FapRoleMenu> GetRoleMenus(string roleUid)
 {
     return(_rbacService.GetRoleMenuList(roleUid));
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }