Ejemplo n.º 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, "修改失败"));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 更新按钮
        /// </summary>
        /// <param name="currentUser"></param>
        /// <param name="incrementMenu"></param>
        /// <returns></returns>
        public async Task <bool> UpdateMenuAsync(UserCacheBo currentUser, IncrementMenuParam incrementMenu)
        {
            var count = await CurrentDbContext.SysMenus.Where(c => c.MenuId == incrementMenu.MenuId).UpdateFromQueryAsync(c => new SysMenu()
            {
                Deleted     = incrementMenu.Deleted,
                MenuName    = incrementMenu.MenuName,
                OrderIndex  = incrementMenu.OrderIndex,
                Icon        = incrementMenu.Icon,
                Url         = incrementMenu.Url,
                UpdatedBy   = currentUser.UserId,
                UpdatedTime = DateTime.Now,
            });

            return(count > 0);
            //var menu = await FindAsync<SysMenu>(incrementMenu.MenuId);
            //if (menu != null)
            //{
            //    menu.Deleted = incrementMenu.Deleted;
            //    menu.MenuName = incrementMenu.MenuName;
            //    menu.OrderIndex = incrementMenu.OrderIndex;
            //    menu.Icon = incrementMenu.Icon;
            //    menu.Url = incrementMenu.Url;
            //    menu.UpdatedBy = currentUser.UserId;
            //    menu.UpdatedTime = DateTime.Now;
            //    Update(menu);
            //}
            //return await SaveChangesAsync() > 0;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 创建缓存
        /// </summary>
        /// <param name="userCache"></param>
        public static void CreateUserCache(UserCacheBo userCache)
        {
            // 直接以用户id作为缓存key -- 单点登录
            // 若想一个账号多点登录的,可以换一种方式-如guid等
            var sid = userCache.UserId.ToString();
            var key = FormatPrefixKey(sid);

            userCache.LoginIp   = LionWeb.GetClientIp();
            userCache.LoginTime = DateTime.Now;

            var redisClient = LionWeb.AutofacContainer.Resolve <RedisClient>();

            redisClient.Set(key, userCache, RedisTimeout);
            AddToMemoryCache(key, userCache);
            LionWeb.HttpContext.Items["user"] = userCache;

            //UserCacheBo oldCache = Get(sid,false);
            //UserCacheBo cache = oldCache;

            ////如果是同一用户,仅更新时间 单点登录
            //if (oldCache?.LoginIp != userCache.LoginIp || oldCache?.UserToken != userCache.UserToken || oldCache?.PassWord != userCache.PassWord)
            //{
            //    DeleteCache(sid);
            //    oldCache = null;
            //}
            //if (oldCache == null)
            //{
            //    cache = userCache;
            //    var redisClient = LionWeb.AutofacContainer.Resolve<RedisClient>();
            //    redisClient.Set(key, cache, RedisTimeout);
            //    AddToMemoryCache(key, cache);
            //}
        }
Ejemplo n.º 4
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));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 获取菜单对象
        /// </summary>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <List <MenuPermsDto> > GetCurrentMenuTreeAsync(UserCacheBo currentUser)
        {
            var currentMenus = await GetCurrentMenuAsync(currentUser);

            var cacheMenus = GetMenus(currentMenus);

            return(cacheMenus.MapToList <MenuPermsDto>());
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 获取当前用户的权限菜单树 - 按钮放置于页面下
        /// </summary>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <List <MenuPermsDto> > GetCurrentMenuListAsync(UserCacheBo currentUser)
        {
            var cacheMenus = await GetCurrentMenuAsync(currentUser);

            var permsDto    = cacheMenus.MapToList <MenuPermsDto>();
            var resultMenus = GetMenuList(permsDto);

            return(resultMenus);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 登出 -- 注销当前信息
        /// </summary>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task LogoutAsync(UserCacheBo currentUser)
        {
            await RedisClient.DeleteAsync(CacheKeys.USER + currentUser.UserId);

            await RedisClient.DeleteAsync(CacheKeys.MENU_TREE + currentUser.UserId);

            LionMemoryCache.Remove(CacheKeys.USER + currentUser.UserId);
            LionMemoryCache.Remove(CacheKeys.MENU_TREE + currentUser.UserId);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 检查角色是否可操作
        /// </summary>
        /// <param name="roleIds"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <string> CheckRoleIds(List <long> roleIds, UserCacheBo currentUser)
        {
            var userRoles = await SysUserDao.CurrentDbContext.SysUserRoleRelations.Where(c => c.TenantId == currentUser.TenantId && !c.Deleted && roleIds.Contains(c.RoleId) && c.State == 1).ToListAsync();

            if (userRoles.Any(c => c.CreatedBy <= 0))
            {
                return("系统角色只读");
            }

            if (userRoles.Any(c => currentUser.RoleIdList.Contains(c.RoleId)))
            {
                return("自身角色不可操作");
            }

            return("");
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 校验当前角色是否能操作
        /// </summary>
        /// <param name="roleId"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        private async Task <string> RoleIdCheckAsync(long roleId, UserCacheBo currentUser)
        {
            var role = await SysRoleDao.FirstAsync <SysRole>(c => c.RoleId == roleId && c.TenantId == currentUser.TenantId && !c.Deleted);

            if (currentUser.RoleIdList.Contains(roleId))
            {
                return("当前角色不可操作");
            }
            if (role == null)
            {
                return("角色不存在");
            }

            if (role.CreatedBy <= 0)
            {
                return("系统角色只读");
            }

            return("");
        }
Ejemplo n.º 10
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);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 用户管理界面获取可关联角色 能看到这个界面的 就有管理所有当前租户下的权限 除系统创建角色外
        /// </summary>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <PageResponse <RoleListDto> > GetCanRelationRoleListAsync(UserCacheBo currentUser)
        {
            CloseTracking();
            Expression <Func <SysRole, bool> > roleExpression = s => !s.Deleted && s.TenantId == currentUser.TenantId && s.CreatedBy > 0;
            var tempQueryable = CurrentDbContext.SysRoles.Where(roleExpression);

            if (currentUser.CreatedBy > 0)
            {
                tempQueryable = tempQueryable.Where(c => !currentUser.RoleIdList.Contains(c.RoleId));
            }
            var resultQueryable = from sysRole in tempQueryable
                                  select new RoleListDto()
            {
                RoleId   = sysRole.RoleId.ToString(),
                RoleName = sysRole.RoleName,
            };
            var result = await LoadPageEntitiesAsync(resultQueryable, 1, 1000, false, c => c.RoleId);

            return(result);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 重新生成缓存和token
        /// </summary>
        /// <param name="userCache"></param>
        private static void CreateTokenCache(UserCacheBo userCache)
        {
            // 将某些信息存到token的payload中,此处是放的内存缓存信息  可替换成其它的
            // aes加密的原因是避免直接被base64反编码看见
            //var encryptMsg = userCache.ToJson().EncryptAES();
            userCache.SessionId = Guid.NewGuid().ToString("N");
            var dic = new Dictionary <string, string>()
            {
                { "uid", userCache.UserId.ToString() },
                { "tenantId", userCache.TenantId.ToString() },
                { "sessionId", userCache.SessionId } //一个账号仅允许在一个地方登录
            };
            var token = TokenManager.GenerateToken(dic.ToJson(), 3 * 24);

            LionWeb.HttpContext.Response.Headers["token"] = token;
            userCache.UserToken = token;
            LionWeb.HttpContext.Response.Headers["Access-Control-Expose-Headers"] = "token"; //多个以逗号分隔 eg:token,sid

            LionUser.CurrentUser = userCache;
            //LionUserCache.CreateUserCache(userCache);
        }
Ejemplo n.º 13
0
        public virtual async Task <BaseResponseModel> RemoveRoleAsync(long roleId, UserCacheBo currentUser)
        {
            var result = new ResponseModel <string>();
            var db     = SysRoleDao.CurrentDbContext;

            var checkResult = await RoleIdCheckAsync(roleId, currentUser);

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

            var count = await db.SysRoles.Where(c => c.RoleId == roleId && !c.Deleted).DeleteFromQueryAsync();

            count += await db.SysUserRoleRelations.Where(c => c.RoleId == roleId).DeleteFromQueryAsync();

            count += await db.SysRoleMenuRelations.Where(c => c.RoleId == roleId).DeleteFromQueryAsync();

            count += await db.SaveChangesAsync();

            return(count > 0 ? result.Succeed("角色删除成功") : result.Fail("角色删除失败"));
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 获取当前角色关联用户
        /// </summary>
        /// <param name="roleId"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> GetRoleUserAsync(long roleId, UserCacheBo currentUser)
        {
            SysRoleDao.CloseTracking();
            var db = SysRoleDao.CurrentDbContext;
            var userRoleRelations = db.SysUserRoleRelations.Where(c => c.RoleId == roleId && !c.Deleted && c.TenantId == currentUser.TenantId);

            // 排除当前管理员 和 自己
            var users = db.SysUsers.Where(c => c.TenantId == currentUser.TenantId && c.CreatedBy > 0 && c.UserId != currentUser.UserId);

            var data = from user in users
                       join userRole in userRoleRelations on user.UserId equals userRole.UserId into ur1
                       from ur2 in ur1.DefaultIfEmpty()
                       select new
            {
                roleId   = ur2 == null ? -1 : ur2.RoleId,
                userId   = user.UserId,
                NickName = user.NickName
            };
            var result = await data.Distinct().ToListAsync();

            return(new ResponseModel().Succeed(result));
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 获取角色及关联一览
        /// </summary>
        /// <param name="rolePageParam"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <PageResponse <RoleListDto> > RoleListAsync(RolePageParam rolePageParam, UserCacheBo currentUser)
        {
            CloseTracking();
            Expression <Func <SysRole, bool> > roleExpression = s => !s.Deleted && s.TenantId == currentUser.TenantId;

            if (!rolePageParam.RoleName.IsNullOrEmpty())
            {
                roleExpression = roleExpression.And(c => c.RoleName.Contains(rolePageParam.RoleName));
            }

            var tempQueryable = CurrentDbContext.SysRoles.Where(roleExpression);

            if (currentUser.CreatedBy > 0)
            {
                // 非管理员不看系统创建的角色
                tempQueryable = tempQueryable.Where(c => c.CreatedBy > 0);
            }

            var resultQueryable = from sysRole in tempQueryable
                                  select new RoleListDto()
            {
                RoleId    = sysRole.RoleId.ToString(),
                RoleDesc  = sysRole.RoleDesc,
                RoleName  = sysRole.RoleName,
                NickNames = from userRole in CurrentDbContext.SysUserRoleRelations
                            join sysUser in CurrentDbContext.SysUsers on userRole.UserId equals sysUser.UserId
                            where userRole.RoleId == sysRole.RoleId && !userRole.Deleted && userRole.TenantId == currentUser.TenantId && userRole.State == 1 && sysUser.State == 1 && sysUser.TenantId == currentUser.TenantId
                            select sysUser.NickName
            };
            var result = await LoadPageEntitiesAsync(resultQueryable, rolePageParam.CurrentPage, rolePageParam.PageSize, false, c => c.RoleId);

            return(result);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="modifyPwdParam"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <ResponseModel <string> > ModifyPwdAsync(ModifyPwdParam modifyPwdParam, UserCacheBo currentUser)
        {
            var result = new ResponseModel <string>();

            if (modifyPwdParam.NewPassWord == modifyPwdParam.OldPassWord)
            {
                return(result.Fail(ResponseCode.Fail, "不允许原密码和新密码相同的修改"));
            }

            if (modifyPwdParam.OldPassWord.Md5Encrypt() == currentUser.PassWord)
            {
                var updateResult = await SysUserDao.ModifyPwdAsync(modifyPwdParam, currentUser.UserId);

                if (updateResult)
                {
                    // 修改成功 登出 重新登录
                    await LogoutAsync(currentUser);

                    return(result.Succeed("修改成功,请重新登录"));
                }

                return(result.Fail(ResponseCode.Fail, "修改失败,请稍后再试"));
            }

            return(result.Fail(ResponseCode.Fail, "原密码不正确"));
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 用户管理获取一览数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="pageSize"></param>
        /// <param name="currentPage"></param>
        /// <param name="email"></param>
        /// <param name="nickName"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <PageResponse <UserManagerDto> > GetManagerUserAsync(int pageSize, int currentPage, string email, string nickName, UserCacheBo currentUser)
        {
            var result = await SysUserDao.GetManagerUserAsync(pageSize, currentPage, email, nickName, currentUser);

            return(result);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// 用户管理界面创建用户
        /// </summary>
        /// <param name="param"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> CreateManagerUserAsync(CreateUserParam param, UserCacheBo currentUser)
        {
            var result = new ResponseModel <bool>();

            // 考虑是否验证上传的角色是当前租户下的
            var checkResult = await CheckRoleIds(param.RoleIds, currentUser);

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

            if (await ExistUserAsync(param.Email))
            {
                result.Fail(ResponseCode.Fail, "该邮箱已存在", false);
                return(result);
            }

            var sysUser = new SysUser()
            {
                NickName             = param.NickName,
                PassWord             = param.Pwd.Md5Encrypt(),
                Email                = param.Email,
                Sex                  = 1,
                State                = 1,
                CreatedTime          = DateTime.Now,
                UpdatedTime          = DateTime.Now,
                TenantId             = currentUser.TenantId,
                UpdatedBy            = 0,
                CreatedBy            = currentUser.UserId,
                SysUserRoleRelations = new List <SysUserRoleRelation>()
            };

            param.RoleIds.ForEach(roleId =>
            {
                sysUser.SysUserRoleRelations.Add(new SysUserRoleRelation()
                {
                    TenantId    = currentUser.TenantId,
                    RoleId      = roleId,
                    State       = 1,
                    CreatedTime = DateTime.Now,
                    CreatedBy   = currentUser.UserId,
                    Deleted     = false,
                });
            });
            SysUserDao.Add(sysUser);
            var count = await SysUserDao.SaveChangesAsync();

            return(count > 0 ? result.Succeed(true) : result.Fail("保存失败", false));
        }
Ejemplo n.º 19
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, "保存失败"));
        }
Ejemplo n.º 20
0
        /// <summary>
        /// 修改角色
        /// </summary>
        /// <param name="incrementRoleParam"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> ModifyRoleAsync(IncrementRoleParam incrementRoleParam, UserCacheBo currentUser)
        {
            var result = new ResponseModel <string>();
            var db     = SysRoleDao.CurrentDbContext;

            if (await db.SysRoles.AnyAsync(c => c.TenantId == currentUser.TenantId && !c.Deleted && c.RoleName == incrementRoleParam.RoleName && c.RoleId != incrementRoleParam.RoleId))
            {
                return(result.Fail("角色名已存在"));
            }

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

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

            var role = await db.SysRoles.FirstOrDefaultAsync(c => !c.Deleted && c.RoleId == incrementRoleParam.RoleId && c.TenantId == currentUser.TenantId);

            role.RoleName    = incrementRoleParam.RoleName;
            role.RoleDesc    = incrementRoleParam.RoleDesc ?? "";
            role.UpdatedBy   = currentUser.UserId;
            role.UpdatedTime = DateTime.Now;
            var count = await db.SaveChangesAsync();

            return(count > 0 ? result.Succeed("修改成功") : result.Fail("修改失败", "修改失败"));
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 用户管理界面获取可关联角色
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <PageResponse <RoleListDto> > GetCanRelationRoleList(UserCacheBo currentUser)
        {
            PageResponse <RoleListDto> roleList = await SysRoleDao.GetCanRelationRoleListAsync(currentUser);

            return(roleList);
        }
Ejemplo n.º 22
0
        public virtual async Task <BaseResponseModel> ModifyUserRoleAsync(ModifyUserRoleParam param, UserCacheBo currentUser)
        {
            var result      = new ResponseModel <string>();
            var checkResult = await RoleIdCheckAsync(param.RoleId, currentUser);

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

            var db        = SysRoleDao.CurrentDbContext;
            var dbUserIds = await db.SysUsers.Where(c => c.TenantId == currentUser.TenantId && c.CreatedBy > 0 && c.UserId != currentUser.UserId).Select(c => c.UserId).ToListAsync();

            var crossUserIds = param.UserIds.Intersect(dbUserIds).ToList(); //检查修改的用户是否是自己管理的用户ID,谨防其它手段上传的数据
            //直接全量修改 原有角色用户关系删除 直接新增现加的
            await db.SysUserRoleRelations.Where(c => c.RoleId == param.RoleId && c.TenantId == currentUser.TenantId).DeleteFromQueryAsync();

            if (crossUserIds.Count > 0)
            {
                var userRoles = new List <SysUserRoleRelation>();
                crossUserIds.ForEach(uid =>
                {
                    userRoles.Add(new SysUserRoleRelation()
                    {
                        TenantId    = currentUser.TenantId,
                        UserId      = uid,
                        RoleId      = param.RoleId,
                        State       = 1,
                        CreatedBy   = currentUser.UserId,
                        CreatedTime = DateTime.Now,
                        Deleted     = false,
                        UpdatedBy   = 0,
                        UpdatedTime = DateTime.Now,
                    });
                });
                await db.SysUserRoleRelations.AddRangeAsync(userRoles);
            }

            await db.SaveChangesAsync();

            return(result.Succeed("修改成功"));
        }
Ejemplo n.º 23
0
        /// <summary>
        /// 用户管理界面编辑用户信息
        /// </summary>
        /// <param name="modifyUserParam"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> ModifyManagerUserAsync(ModifyUserParam modifyUserParam, UserCacheBo currentUser)
        {
            // 考虑是否验证上传的角色是当前租户下的
            var checkResult = await CheckRoleIds(modifyUserParam.RoleIds, currentUser);

            if (!checkResult.IsNullOrEmpty())
            {
                return(new ResponseModel().Fail(checkResult));
            }
            var result = await SysUserDao.ModifyManagerUserAsync(modifyUserParam.UserId, modifyUserParam.RoleIds, modifyUserParam.NickName, currentUser);

            return(result);
        }
Ejemplo n.º 24
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("修改成功"));
        }
Ejemplo n.º 25
0
        public virtual async Task <BaseResponseModel> RemoveManagerUserAsync(long uid, UserCacheBo currentUser)
        {
            var result = new ResponseModel <bool>();
            var db     = SysUserDao.CurrentDbContext;

            var deleteUser = await db.SysUsers.FirstOrDefaultAsync(c => c.UserId == uid && c.TenantId == currentUser.UserId && c.State == 1);

            if (deleteUser == null)
            {
                return(result.Fail("账号不存在"));
            }
            // 管理员创建者都是0  注册的
            if (deleteUser.CreatedBy <= 0)
            {
                return(result.Fail("管理员只读"));
            }

            var count = 0;

            count += await db.SysUsers.Where(c => c.UserId == uid && c.TenantId == currentUser.TenantId).DeleteFromQueryAsync();

            count += await db.SysUserRoleRelations.Where(c => c.UserId == uid && c.TenantId == currentUser.TenantId).DeleteFromQueryAsync();

            count += await db.SaveChangesAsync();

            return(count > 0 ? result.Succeed(true) : result.Fail("删除失败"));
        }
Ejemplo n.º 26
0
        public virtual async Task <ResponseModel <bool> > ModifyManagerUserAsync(long uid, List <long> roleIds, string nickName, UserCacheBo currentUser)
        {
            var result = new ResponseModel <bool>();
            var user   = await CurrentDbContext.SysUsers.FirstOrDefaultAsync(c => c.UserId == uid && c.State == 1 && c.TenantId == currentUser.TenantId);

            if (user == null)
            {
                return(result.Fail("修改的用户信息不存在"));
            }
            if (user.CreatedBy == 0)
            {
                return(result.Fail("管理员只读"));
            }

            //获取当前用户所拥有的角色
            var existRoleIds = await CurrentDbContext.SysUserRoleRelations.Where(c => c.UserId == uid && !c.Deleted && c.State == 1 && c.TenantId == currentUser.TenantId && c.CreatedBy > 0)
                               .Select(c => c.RoleId).ToListAsync();

            user.NickName = nickName;

            var dRoleIds = existRoleIds.Except(roleIds).ToList(); //删除此前分配的角色 不在这次保存角色中的
            var iRoleIds = roleIds.Except(existRoleIds).ToList(); //插入这次新增的不在之前角色中的

            //相同部分不做改变
            if (dRoleIds.Any())
            {
                // 删除
                await CurrentDbContext.SysUserRoleRelations.Where(c => c.UserId == uid && dRoleIds.Contains(c.RoleId) && c.TenantId == currentUser.TenantId).DeleteFromQueryAsync();
            }

            if (iRoleIds.Count > 0)
            {
                //插入
                var userRoleRelations = new List <SysUserRoleRelation>();
                iRoleIds.ForEach(roleId =>
                {
                    userRoleRelations.Add(new SysUserRoleRelation()
                    {
                        TenantId    = currentUser.TenantId,
                        CreatedBy   = currentUser.UserId,
                        CreatedTime = DateTime.Now,
                        RoleId      = roleId,
                        State       = 1,
                        UserId      = uid,
                    });
                });
                await CurrentDbContext.SysUserRoleRelations.AddRangeAsync(userRoleRelations);
            }

            var count = await SaveChangesAsync();

            return(count > 0 ? result.Succeed(true) : result.Fail("保存修改信息失败"));
        }
Ejemplo n.º 27
0
 /// <summary>
 /// 添加到本地缓存
 /// </summary>
 /// <param name="key"></param>
 /// <param name="cache"></param>
 private static void AddToMemoryCache(string key, UserCacheBo cache)
 {
     Cache.Set(key, cache, Timeout);
 }
Ejemplo n.º 28
0
        /// <summary>
        /// 新增角色
        /// </summary>
        /// <param name="incrementRoleParam"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <BaseResponseModel> AddRoleAsync(IncrementRoleParam incrementRoleParam, UserCacheBo currentUser)
        {
            var result = new ResponseModel <string>();
            var db     = SysRoleDao.CurrentDbContext;

            SysRoleDao.CloseTracking();
            if (await db.SysRoles.CountAsync(c => c.TenantId == currentUser.TenantId && !c.Deleted) > 500)
            {
                return(result.Fail("一个租户下角色上限为500个"));
            }

            if (await db.SysRoles.AnyAsync(c => c.TenantId == currentUser.TenantId && !c.Deleted && c.RoleName == incrementRoleParam.RoleName))
            {
                return(result.Fail("角色名已存在"));
            }

            var role = new SysRole()
            {
                TenantId    = currentUser.TenantId,
                CreatedBy   = currentUser.UserId,
                CreatedTime = DateTime.Now,
                Deleted     = false,
                RoleDesc    = incrementRoleParam.RoleDesc ?? "",
                RoleName    = incrementRoleParam.RoleName,
            };
            await db.SysRoles.AddAsync(role);

            var count = await db.SaveChangesAsync();

            return(count > 0 ? result.Succeed("添加成功") : result.Fail("添加失败"));
        }
Ejemplo n.º 29
0
        /// <summary>
        /// 获取用户管理用户一览
        /// </summary>
        /// <param name="pageSize"></param>
        /// <param name="currentPage"></param>
        /// <param name="email"></param>
        /// <param name="nickName"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <PageResponse <UserManagerDto> > GetManagerUserAsync(int pageSize, int currentPage, string email, string nickName, UserCacheBo currentUser)
        {
            CloseTracking();
            Expression <Func <SysUser, bool> > userExpression = sysUser => sysUser.State == 1 && sysUser.TenantId == currentUser.TenantId;

            if (!email.IsNullOrEmpty())
            {
                userExpression = userExpression.And(c => c.Email == email);
            }
            if (!nickName.IsNullOrEmpty())
            {
                userExpression = userExpression.And(c => c.NickName.Contains(nickName));
            }

            // 分配用户管理界面 则可以管理当前所有用户
            var sysUserQueryable = CurrentDbContext.SysUsers.Where(userExpression);

            if (currentUser.CreatedBy > 0)
            {
                //非超级管理员不读取超级管理员信息
                sysUserQueryable = sysUserQueryable.Where(c => c.CreatedBy > 0);
            }
            var result = await LoadPageEntitiesProjectToAsync <SysUser, long, UserManagerDto>(sysUserQueryable, currentPage, pageSize, false, u => u.UserId);

            var uids           = result.PageData.Select(c => long.Parse(c.UserId));
            var rolesQueryable = from userRoleRelation in CurrentDbContext.SysUserRoleRelations
                                 join sysRole in CurrentDbContext.SysRoles on userRoleRelation.RoleId equals sysRole.RoleId
                                 where !userRoleRelation.Deleted && userRoleRelation.State == 1 && !sysRole.Deleted && sysRole.TenantId == currentUser.TenantId && userRoleRelation.TenantId == currentUser.TenantId &&
                                 uids.Contains(userRoleRelation.UserId)
                                 select new
            {
                userRoleRelation.UserId,
                userRoleRelation.RoleId,
                sysRole.RoleName,
                sysRole.RoleDesc,
            };
            var roles = await rolesQueryable.Distinct().ToListAsync();

            result.PageData.ForEach(u =>
            {
                var r       = roles.Where(c => c.UserId.ToString() == u.UserId).ToList();
                u.RoleIds   = r.Select(c => c.RoleId.ToString()).ToList();
                u.RoleNames = r.Select(c => c.RoleName).ToList();
            });

            return(result);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// 获取角色及关联用户一览
        /// </summary>
        /// <param name="rolePageParam"></param>
        /// <param name="currentUser"></param>
        /// <returns></returns>
        public async Task <PageResponse <RoleListDto> > RoleListAsync(RolePageParam rolePageParam, UserCacheBo currentUser)
        {
            PageResponse <RoleListDto> roleList = await SysRoleDao.RoleListAsync(rolePageParam, currentUser);

            return(roleList);
        }