/// <summary> /// 查询该角色拥有哪些权限 /// </summary> /// <param name="roleid"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <ResponseMessage <List <PermissionListResponse> > > SelectRolePermissionAsync(string roleid, CancellationToken cancellationToken = default(CancellationToken)) { var response = new ResponseMessage <List <PermissionListResponse> >() { Extension = new List <PermissionListResponse> { } }; if (await _roleStore.GetAsync(roleid) == null) { throw new ZCustomizeException(ResponseCodeEnum.NotAllow, "没有找到该角色,请重试"); } var rolePer = await _rolePermissionStore.IQueryableListAsync().Where(t => t.RoleId == roleid).Select(y => y.PermissionId).ToListAsync(cancellationToken); var result = from c in await _permissionStore.EnumerableListAsync() group c by c.Group into per select new PermissionListResponse { Group = per.Key, PermissionList = per.Select(u => new PermissionListResponse.ListResponse { Id = u.Id, Name = u.Name, IsAuthorize = rolePer.Contains(u.Id) ? true : false }).ToList() }; response.Extension = result.ToList(); return(response); }
/// <summary> /// 绑定用户角色 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <ResponseMessage <bool> > BindUserRoleAsync(UserAndroleRequest request, CancellationToken cancellationToken = default(CancellationToken)) { var response = new ResponseMessage <bool>() { Extension = false }; using (var transaction = await _transaction.BeginTransaction()) { try { var oldUserRole = _userRoleStore.IQueryableListAsync().Where(item => item.UserId == request.UserId); //新增用户角色和原来的不一致时,就直接删除,在重新添加 if (request.RoleId.Count != await oldUserRole.CountAsync(cancellationToken)) { var oldid = await oldUserRole.Select(y => y.Id).ToListAsync(cancellationToken); await _userRoleStore.DeleteRangeAsync(oldid); var permissionExpansions = await _permissionStore.Permissionitem_Expansions().Where(u => u.UserId == request.UserId).ToListAsync(cancellationToken); if (permissionExpansions.Any()) { await _permissionStore.DeleteRangeAsync(permissionExpansions); //删除权限扩展表数据 } } else { response.Code = ResponseCodeDefines.ObjectAlreadyExists; response.Extension = false; response.Message = "该用户还是原来的角色"; return(response); } if (request.RoleId.Any()) { var userAndrole = new List <User_Role>() { }; foreach (var item in request.RoleId) { userAndrole.Add(new User_Role { CreateTime = DateTime.Now, Id = Guid.NewGuid().ToString(), RoleId = item, UserId = request.UserId, }); } var info = await _rolePermissionStore.IQueryableListAsync().Where(c => request.RoleId.Contains(c.RoleId)).Select(u => u.PermissionId).ToListAsync(); if (info.Any()) { var perExpansions = await _permissionStore.IQueryableListAsync().Where(j => info.Contains(j.Id)).Select(b => new Permissionitem_expansion { UserId = request.UserId, CreateTime = DateTime.Now, Id = Guid.NewGuid().ToString(), PermissionCode = b.Code, }).ToListAsync(); await _permissionStore.AddRangeAsync(perExpansions); // 新增权限扩展表数据 } await _userRoleStore.AddRangeEntityAsync(userAndrole); } await transaction.CommitAsync(); response.Extension = true; } catch (Exception e) { await transaction.RollbackAsync(); _logger.LogError($"绑定用户角色失败,错误日志:{JsonHelper.ToJson(e.ToString())}"); throw new ZCustomizeException(ResponseCodeEnum.ServiceError, "绑定用户角色失败,请重试"); } } return(response); }