Beispiel #1
0
        /// <summary>
        /// 修改菜单
        /// </summary>
        /// <param name="currentUser"></param>
        /// <param name="incrementMenu"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> UpdateMenuAsync(UserCacheBo currentUser, IncrementMenuParam incrementMenu)
        {
            var responseModel = new ResponseModel <bool>();
            var count         = await SysMenuDao.UpdateMenuAsync(currentUser, incrementMenu);

            return(count ? responseModel.Succeed(true) : responseModel.Fail(ResponseCode.Fail, "修改失败"));
        }
Beispiel #2
0
        /// <summary>
        /// 获取当前角色能访问的按钮
        /// </summary>
        /// <param name="roleId"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> GetRoleMenuAsync(long roleId, UserCacheBo currentUser)
        {
            var menus = await SysMenuDao.GetMenusAsync(roleId, currentUser.TenantId);

            var result = MenuBll.GetMenuList(menus);

            return(new ResponseModel().Succeed(result));
        }
Beispiel #3
0
        public virtual async Task <BaseResponseModel> ModifyRoleMenuAsync(ModifyRoleMenuParam roleMenuParam, UserCacheBo currentUser)
        {
            var result = new ResponseModel <string>();

            var checkResult = await RoleIdCheckAsync(roleMenuParam.RoleId, currentUser);

            if (!checkResult.IsNullOrEmpty())
            {
                return(result.Fail(checkResult));
            }

            var currentUserMenus = await MenuBll.GetCurrentMenuAsync(currentUser);

            var currentMenuIds = currentUserMenus.Select(c => c.MenuId).ToList();
            //检查提交的按钮是否存在当前用户管理菜单数据中,只操作存在部分 即交集
            var crossMenuIds = roleMenuParam.MenuIds.Intersect(currentMenuIds).ToList();

            // 这里不是做的全量操作,而且新增部分做插入 数据库中的不在提交数据中的部分做删除  提交的和数据库相交叉的部分不做变动
            var dbMenuIds = await SysMenuDao.LoadEntities <SysRoleMenuRelation>(c => c.RoleId == roleMenuParam.RoleId && c.TenantId == currentUser.TenantId).Select(c => c.MenuId).ToListAsync();

            var dIds = dbMenuIds.Except(crossMenuIds).ToList(); //需要删除的权限
            var iIds = crossMenuIds.Except(dbMenuIds).ToList(); //需要插入的新权限

            var db = SysRoleDao.CurrentDbContext;

            if (dIds.Count > 0)
            {
                await db.SysRoleMenuRelations.Where(c => dIds.Contains(c.MenuId) && c.RoleId == roleMenuParam.RoleId).DeleteAsync();
            }

            if (iIds.Count > 0)
            {
                var roleMenuRelations = iIds.Select(iId => new SysRoleMenuRelation()
                {
                    TenantId    = currentUser.TenantId,
                    CreatedBy   = currentUser.UserId,
                    CreatedTime = DateTime.Now,
                    MenuId      = iId,
                    State       = 1,
                    Deleted     = false,
                    RoleId      = roleMenuParam.RoleId,
                    UpdatedBy   = 0,
                    UpdatedTime = DateTime.Now,
                }).ToList();
                await db.SysRoleMenuRelations.AddRangeAsync(roleMenuRelations);
            }

            await db.SaveChangesAsync();

            return(result.Succeed("修改成功"));
        }
Beispiel #4
0
        /// <summary>
        /// 获取当前用户的原始权限 并设置缓存
        /// </summary>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <List <MenuCacheBo> > GetCurrentMenuAsync(UserCacheBo currentUser)
        {
            var menuKey    = $"{CacheKeys.MENU_TREE}{currentUser.UserId}";
            var cacheMenus = await GetMenuTreeCacheAsync(menuKey);

            if (cacheMenus != null)
            {
                return(cacheMenus);
            }

            //从数据库中获取菜单树 由于菜单不经常变化故设置redis存储7天  本地缓存设置1天
            var roleIds = currentUser.RoleCacheBos.Select(c => c.RoleId).ToList();

            cacheMenus = await SysMenuDao.GetMenusAsync(roleIds, currentUser.TenantId);

            await RedisClient.SetAsync(menuKey, cacheMenus, new TimeSpan(7, 0, 0, 0));

            Cache.Set(menuKey, cacheMenus, new TimeSpan(1, 0, 0, 0));
            return(cacheMenus);
        }
Beispiel #5
0
        public virtual async Task <BaseResponseModel> AddMenuAsync(UserCacheBo currentUser, IncrementMenuParam incrementMenu)
        {
            var responseModel = new ResponseModel <bool>();
            var sysMenu       = incrementMenu.MapTo <SysMenu>();

            sysMenu.CreatedTime = DateTime.Now;
            sysMenu.CreatedBy   = currentUser.UserId;
            sysMenu.UpdatedBy   = currentUser.UserId;


            var relations = new List <SysRoleMenuRelation>();
            // 循环取出租户主体信息角色 增加新权限关系 默认为删除状态 点击分配给使用
            var db = SysMenuDao.CurrentDbContext;
            var roleIdsQueryable = db.SysUserRoleRelations.Where(c => !c.Deleted && c.State == 1 && c.TenantId > 1 && c.CreatedBy == 0).Select(c => new RoleCacheBo {
                RoleId = c.RoleId, TenantId = c.TenantId
            });

            for (int i = 1; i < 100000; i++)
            {
                var roleIds = SysMenuDao.LoadPageEntities(roleIdsQueryable, i, 100, true, roleId => roleId.RoleId);
                if (roleIds.PageData.Count > 0)
                {
                    roleIds.PageData.ForEach(roleInfo =>
                    {
                        relations.Add(new SysRoleMenuRelation()
                        {
                            TenantId    = roleInfo.TenantId,
                            MenuId      = sysMenu.MenuId,
                            RoleId      = roleInfo.RoleId,
                            Deleted     = true, //默认不分配给超级管理员看  需单独分配
                            CreatedTime = DateTime.Now,
                            CreatedBy   = 0,    //系统创建的都设置为0
                            State       = 1,
                        });
                    });
                }
                else
                {
                    break;
                }
            }

            relations.Add(new SysRoleMenuRelation()
            {
                TenantId    = 1,     //系统租户ID
                MenuId      = sysMenu.MenuId,
                RoleId      = 1,     //系统角色ID
                Deleted     = false, //系统管理员使用
                CreatedTime = DateTime.Now,
                CreatedBy   = 0,     //系统创建的都设置为0
                State       = 1,
            });

            await db.SysRoleMenuRelations.AddRangeAsync(relations);

            await SysMenuDao.AddAsync(sysMenu);

            var count = await SysMenuDao.SaveChangesAsync();

            return(count > 0 ? responseModel.Succeed(true) : responseModel.Fail(ResponseCode.Fail, "保存失败"));
        }