public async Task <RoleAssigMenuViewModel> GetRoleAssigMenuViewModels(Guid RoleId) { #region 获取所有的菜单和按钮 var list = this._menuRepositoty.GetAll(x => x.IsDrop == false).ToList(); //获取所有的菜单列表 var RoleAssigMenu = MyMappers.ObjectMapper.Map <List <SysMenu>, List <RoleAssigMenuViewModel> >(list); var buttonlist = _buttonRepositoty.GetAll(x => x.IsDrop == false); //获取所有的按钮列表 //var RoleAssigButton = MyMappers.ObjectMapper.Map<List<SysButton>, List<RoleAssigButtonViewModel>>(buttonlist); RoleAssigMenuViewModel roleAssigMenuView = new RoleAssigMenuViewModel() { Id = Guid.Empty, expand = true, title = "根节点", disabled = false, @checked = false, }; var SysbuttonList = await _buttonRepositoty.GetAllListAsync(x => x.IsDrop == false);//获取所有的菜单按钮列表 #endregion #region 获取该角色下的所有权限 var roleRight = await _roleRightAssigRepository.GetAllListAsync(x => x.RoleId == RoleId); #endregion //调用递归事件 CreateRoleAssigTree(RoleAssigMenu, roleAssigMenuView, SysbuttonList, roleRight); //dynamic var = LinqTosql(); return(roleAssigMenuView); }
/// <summary> /// 获取树形菜单,渲染左侧菜单使用 /// </summary> /// <returns></returns> public async Task <RouterBar> RouterBar(Guid userId) { var Rolelist = await _userRoleRepository.GetAllListAsync(x => x.UserIdOrDepId == userId); //根据用户ID获取角色列表 var RoleIds = Rolelist.Select(x => x.RoleId).ToList(); //获取到角色列表中的角色ID var MenuList = await _roleRightAssigRepository.GetAllListAsync(x => RoleIds.Contains(x.RoleId)); //根据角色Id获取菜单列表 var MenuIds = MenuList.Select(x => x.MenuId).ToList(); //获取角色权限中的菜单ID var baselist = await _menuRepositoty.GetAllListAsync(x => MenuIds.Contains(x.Id)); //根据菜单ID获取菜单列表 x=>MenuIds.Contains(x.Id) var btnlist = await _buttonRepositoty.GetAllListAsync(x => x.IsShow == true && x.IsDrop == false); RouterBar routerbar = new RouterBar() { Id = Guid.Empty, name = "根节点", order = 0, path = "", meta = new NavigationBarMeta(), ParentId = Guid.Empty, }; //定义一个树形列表 var routerbarTreeall = baselist.Where(x => x.IsDrop == false).Select(s => new RouterBar { Id = s.Id, name = s.Name, ParentId = s.ParentId, iconCls = s.Icon, order = s.Sort, path = s.UrlAddress, meta = new NavigationBarMeta { requireAuth = true, title = s.Name, } }).ToList(); try { //递归形成前端路由器格式的树形菜单 CreateMenuTree(routerbarTreeall, routerbar, btnlist, MenuList); return(routerbar); } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取树形菜单,渲染左侧菜单使用 /// </summary> /// <returns></returns> public async Task <RouterBar> RouterBar(Guid userId) { //记录Job时间 //Stopwatch stopwatch = new Stopwatch(); //stopwatch.Start(); var Rolelist = await _userRoleRepository.GetAllListAsync(x => x.UserIdOrDepId == userId); //根据用户ID获取角色列表 var RoleIds = Rolelist.Select(x => x.RoleId).ToList(); //获取到角色列表中的角色ID var MenuList = await _roleRightAssigRepository.GetAllListAsync(x => RoleIds.Contains(x.RoleId)); //根据角色Id获取菜单列表 var MenuIds = MenuList.Select(x => x.MenuId).ToList(); //获取角色权限中的菜单ID List <SysMenu> baselist = new List <SysMenu>(); if (await _redisCacheManager.Get(Appsettings.app(new string[] { "CacheOptions", "Menukey" }))) //判断菜单缓存是否存在,如果存在则取缓存不存在则取数据库 { baselist = await _redisCacheManager.GetList <SysMenu>(Appsettings.app(new string[] { "CacheOptions", "Menukey" })); //.Where(x=>MenuIds.Contains(x.Id)).ToList(); baselist = baselist.Where(x => MenuIds.Contains(x.Id)).ToList(); } else { await RestMenuCache(); baselist = await _redisCacheManager.GetList <SysMenu>(Appsettings.app(new string[] { "CacheOptions", "Menukey" })); baselist = baselist.Where(x => MenuIds.Contains(x.Id)).ToList(); } if (!baselist.Any()) { baselist = await _menuRepositoty.GetAllListAsync(x => MenuIds.Contains(x.Id));//根据菜单ID获取菜单列表 x=>MenuIds.Contains(x.Id) } var btnlist = await _buttonRepositoty.GetAllListAsync(x => x.IsShow == true && x.IsDrop == false); RouterBar routerbar = new RouterBar() { Id = Guid.Empty, name = "根节点", order = 0, path = "", meta = new NavigationBarMeta(), ParentId = Guid.Empty, }; //定义一个树形列表 var routerbarTreeall = baselist.Where(x => x.IsDrop == false).Select(s => new RouterBar { Id = s.Id, name = s.Name, ParentId = s.ParentId, iconCls = s.Icon, order = s.Sort, path = s.UrlAddress, meta = new NavigationBarMeta { requireAuth = true, title = s.Name, } }).ToList(); try { //递归形成前端路由器格式的树形菜单 CreateMenuTree(routerbarTreeall, routerbar, btnlist, MenuList); return(routerbar); } catch (Exception ex) { throw ex; } }