Ejemplo n.º 1
0
        /// <summary>
        /// 在自定义策略处理器中调用方法
        /// </summary>
        /// <param name="roleArr"></param>
        /// <returns></returns>
        public async Task <List <RoleActionModel> > GetRoleAction(Guid [] roleArr)
        {
            try
            {
                var RoleModuleList = new List <RoleActionModel>();
                var Rolelist       = await _roleRepositoty.GetAllListAsync(x => roleArr.Contains(x.Id));                             //根据Httpcontext存储的角色名称获取角色ID

                var RoleAssig = await _roleRightAssigRepository.GetAllListAsync(x => Rolelist.Select(s => s.Id).Contains(x.RoleId)); //根据角色ID获取到所有的权限

                var Btnlist = await _buttonRepositoty.GetAllListAsync(x => x.IsDrop == false);                                       //获取所有的按钮

                List <SysMenu> Menulist = new List <SysMenu>();
                if (await _redisCacheManager.Get(Appsettings.app(new string[] { "CacheOptions", "Menukey" })))                          //判断菜单缓存是否存在,如果存在则取缓存不存在则取数据库
                {
                    Menulist = await _redisCacheManager.GetList <SysMenu>(Appsettings.app(new string[] { "CacheOptions", "Menukey" })); //.Where(x=>MenuIds.Contains(x.Id)).ToList();
                }
                else
                {
                    Menulist = await this._menuRepositoty.GetAll(x => x.IsDrop == false).AsNoTracking().ToListAsync();

                    await _redisCacheManager.Set(Appsettings.app(new string[] { "CacheOptions", "Menukey" }), Menulist);
                }
                if (!Menulist.Any())
                {
                    Menulist = await _menuRepositoty.GetAllListAsync(x => x.IsDrop == false);//根据菜单ID获取菜单列表 x=>MenuIds.Contains(x.Id)
                }
                foreach (var item in RoleAssig)
                {
                    var RoleModel = Rolelist.Where(x => x.Id == item.RoleId).FirstOrDefault(); //获取角色实体
                    var MenuModel = Menulist.Where(x => x.Id == item.MenuId).FirstOrDefault(); //获取菜单实体
                    RoleModuleList.Add(new RoleActionModel {
                        RoleName = RoleModel.Id, ActionName = MenuModel.APIAddress
                    });
                    if (!item.ButtonIds.IsNullOrEmpty()) //判断是否存在按钮
                    {
                        List <Guid> guids   = new List <Guid>();
                        var         btnArr  = item.ButtonIds.Split(',').Select(x => x.ToGuid()).ToList();
                        var         RoleBtn = Btnlist.Where(x => btnArr.Contains(x.Id)).ToList();
                        RoleModuleList.AddRange(RoleBtn.Select(x => new RoleActionModel
                        {
                            RoleName   = RoleModel.Id,//在这里代表的是
                            ActionName = x.APIAddress,
                        }));
                    }
                }
                return(RoleModuleList);
            }
            catch (Exception ex)
            {
                var FromMailAddres = Appsettings.app(new string[] { "FromMailConfig", "FromMailAddres" });
                var FromMailPwd    = Appsettings.app(new string[] { "FromMailConfig", "FromMailPwd" });
                var ToMail         = Appsettings.app(new string[] { "FromMailConfig", "ToMail" });
                await SendEmail.SendMailAvailableAsync(FromMailAddres, FromMailPwd, ToMail, $"{ DateTime.Now.ToString("yyyy-MM-dd")}Redis超出限制错误", "Redis链接错误");

                LogServer.WriteErrorLog($"{ DateTime.Now.ToString("yyyy-MM-dd hh:mm:dd")}Redis超出限制错误", $"Redis链接错误", ex);
                throw ex;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 在自定义策略处理器中调用方法
        /// </summary>
        /// <param name="roleArr"></param>
        /// <returns></returns>
        public async Task <List <RoleActionModel> > GetRoleAction(Guid [] roleArr)
        {
            var RoleModuleList = new List <RoleActionModel>();
            var Rolelist       = await _roleRepositoty.GetAllListAsync(x => roleArr.Contains(x.Id));                             //根据Httpcontext存储的角色名称获取角色ID

            var RoleAssig = await _roleRightAssigRepository.GetAllListAsync(x => Rolelist.Select(s => s.Id).Contains(x.RoleId)); //根据角色ID获取到所有的权限

            var Btnlist = await _buttonRepositoty.GetAllListAsync(x => x.IsDrop == false);                                       //获取所有的按钮

            List <SysMenu> Menulist = new List <SysMenu>();

            if (await _redisCacheManager.Get(Appsettings.app(new string[] { "CacheOptions", "Menukey" })))                          //判断菜单缓存是否存在,如果存在则取缓存不存在则取数据库
            {
                Menulist = await _redisCacheManager.GetList <SysMenu>(Appsettings.app(new string[] { "CacheOptions", "Menukey" })); //.Where(x=>MenuIds.Contains(x.Id)).ToList();
            }
            else
            {
                Menulist = await this._menuRepositoty.GetAll(x => x.IsDrop == false).AsNoTracking().ToListAsync();

                await _redisCacheManager.Set(Appsettings.app(new string[] { "CacheOptions", "Menukey" }), Menulist);
            }
            if (!Menulist.Any())
            {
                Menulist = await _menuRepositoty.GetAllListAsync(x => x.IsDrop == false);//根据菜单ID获取菜单列表 x=>MenuIds.Contains(x.Id)
            }
            foreach (var item in RoleAssig)
            {
                var RoleModel = Rolelist.Where(x => x.Id == item.RoleId).FirstOrDefault(); //获取角色实体
                var MenuModel = Menulist.Where(x => x.Id == item.MenuId).FirstOrDefault(); //获取菜单实体
                RoleModuleList.Add(new RoleActionModel {
                    RoleName = RoleModel.Id, ActionName = MenuModel.APIAddress
                });
                if (!item.ButtonIds.IsNullOrEmpty()) //判断是否存在按钮
                {
                    List <Guid> guids   = new List <Guid>();
                    var         btnArr  = item.ButtonIds.Split(',').Select(x => x.ToGuid()).ToList();
                    var         RoleBtn = Btnlist.Where(x => btnArr.Contains(x.Id)).ToList();
                    RoleModuleList.AddRange(RoleBtn.Select(x => new RoleActionModel
                    {
                        RoleName   = RoleModel.Id,//在这里代表的是
                        ActionName = x.APIAddress,
                    }));
                }
            }
            return(RoleModuleList);
        }
Ejemplo n.º 3
0
        /// <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
            List <SysMenu> baselist = new List <SysMenu>();

            if (_redisCacheManager.Get("Menu"))//判断菜单缓存是否存在,如果存在则取缓存不存在则取数据库
            {
                baselist = _redisCacheManager.GetList <SysMenu>("Menu");
            }
            else
            {
                RestMenuCache();
                baselist = _redisCacheManager.GetList <SysMenu>("Menu");
            }
            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;
            }
        }