赞
踩
上一篇我们已经完成了权限校验以及授权的部分,本篇接下来我们分析一下如何基于组织用户角色进行权限管理。
在本项目中,支持建立多组织,同一用户支持在不同组织下授予不同的角色。由于本人是新人,如果有好的见解或者看法欢迎和我沟通,互相学习进步。
- using AutoMapper;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json;
- using org.huage.AuthManagement.BizManager.Redis;
- using org.huage.AuthManagement.BizManager.wrapper;
- using org.huage.AuthManagement.DataBase.Table;
- using org.huage.AuthManagement.Entity.Managers;
- using org.huage.AuthManagement.Entity.Model;
- using org.huage.AuthManagement.Entity.Request;
- using org.huage.AuthManagement.Entity.Response;
-
- namespace org.huage.AuthManagement.BizManager.Manager;
-
- //权限管理
- public class PermissionManager : IPermissionManager
- {
- private readonly IRepositoryWrapper _wrapper;
- private readonly IRedisManager _redisManager;
- private readonly ILogger<PermissionManager> _logger;
- private readonly IMapper _mapper;
-
- public PermissionManager(IRepositoryWrapper wrapper, IRedisManager redisManager, ILogger<PermissionManager> logger, IMapper mapper)
- {
- _wrapper = wrapper;
- _redisManager = redisManager;
- _logger = logger;
- _mapper = mapper;
- }
-
- /// <summary>
- /// 查询所有的权限信息。
- /// </summary>
- /// <returns></returns>
- public async Task<QueryAllPermissionResponse> QueryAllPermissionAsync()
- {
- var response = new QueryAllPermissionResponse();
-
- try
- {
- //查询缓存
- var permissionModels = await _redisManager.HGetAllValue<PermissionModel>(RedisKeyGenerator.AllRolesRedisKey());
- if (permissionModels.Any())
- {
- response.PermissionModels = permissionModels;
- return response;
- }
-
- //查询数据库
- var permissions = _wrapper.Permission.FindAll().Where(_ => _.IsDeleted == false).ToList();
- var data = _mapper.Map<List<PermissionModel>>(permissions);
- response.PermissionModels = data;
-
- var permissionsDic = data.ToDictionary(_ => _.Id);
- //添加缓存
- await permissionsDic.ParallelForEachAsync(async permission =>
- {
- var redisKey = RedisKeyGenerator.AllPermissions();
- try
- {
- foreach (var s in data)
- {
- await _redisManager.HashSet(redisKey, permission.Key.ToString(),
- JsonConvert.SerializeObject(permission.Value));
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e.Message);
- }
- });
- }
- catch (Exception e)
- {
- _logger.LogError($"QueryAllPermissionAsync error: {e.Message}");
- throw;
- }
-
- return response;
- }
-
- /// <summary>
- /// 添加权限
- /// </summary>
- /// <param name="request"></param>
- public async Task AddPermissionAsync(AddPermissionRequest request)
- {
- var permission = _mapper.Map<Permission>(request);
- _wrapper.Permission.Create(permission);
- await _wrapper.SaveChangeAsync();
- }
- }

- using AutoMapper;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json;
- using org.huage.AuthManagement.BizManager.Redis;
- using org.huage.AuthManagement.BizManager.wrapper;
- using org.huage.AuthManagement.DataBase.Table;
- using org.huage.AuthManagement.Entity.Managers;
- using org.huage.AuthManagement.Entity.Model;
- using org.huage.AuthManagement.Entity.Request;
- using org.huage.AuthManagement.Entity.Response;
-
- namespace org.huage.AuthManagement.BizManager.Manager;
-
- //角色管理
- public class RoleManager : IRoleManager
- {
- private readonly IRepositoryWrapper _wrapper;
- private readonly IRedisManager _redisManager;
- private readonly ILogger<RoleManager> _logger;
- private readonly IMapper _mapper;
-
- public RoleManager(IRedisManager redisManager, ILogger<RoleManager> logger, IMapper mapper,
- IRepositoryWrapper wrapper)
- {
- _redisManager = redisManager;
- _logger = logger;
- _mapper = mapper;
- _wrapper = wrapper;
- }
-
- /// <summary>
- /// 查询指定页的数据
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public async Task<List<RoleModel>> QueryRoleByPageAsync(QueryRoleRequest request)
- {
- //考虑分页
- //参数校验,设置错误,返回第一页
- if (request.PageSize <=0 || request.PageNumber<0)
- {
- request.PageNumber = 1;
- request.PageSize = 10;
- }
- //查询数据库,TODO:后面需要考虑查询的页数是否超过最大页数
- var skip = (request.PageNumber - 1) * request.PageSize;
- var schedulers =await _wrapper.Role.FindAll().Where(_ => _.IsDeleted == false).OrderByDescending(_ => _.CreateTime)
- .Skip(skip).Take(request.PageSize).ToListAsync();
-
- return _mapper.Map<List<RoleModel>>(schedulers);
- }
-
- /// <summary>
- /// 查询所有的角色
- /// </summary>
- /// <returns></returns>
- public async Task<QueryAllRolesResponse> QueryAllRolesAsync(QueryAllRolesRequest request)
- {
- var response = new QueryAllRolesResponse();
-
- try
- {
- //查询缓存
- var allSchedulers = await _redisManager.HGetAllValue<RoleModel>(RedisKeyGenerator.AllRolesRedisKey());
- if (allSchedulers.Any())
- {
- response.RoleModels = allSchedulers;
- return response;
- }
-
- //查询数据库
- var roles = _wrapper.Role.FindAll().Where(_ => _.IsDeleted == false).ToList();
- var data = _mapper.Map<List<RoleModel>>(roles);
- response.RoleModels = data;
-
- var rolesDic = data.ToDictionary(_ => _.Id);
- //添加缓存
- await rolesDic.ParallelForEachAsync(async role =>
- {
- var redisKey = RedisKeyGenerator.AllRolesRedisKey();
- try
- {
- foreach (var s in data)
- {
- await _redisManager.HashSet(redisKey, role.Key.ToString(),
- JsonConvert.SerializeObject(role.Value));
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e.Message);
- }
- });
- }
- catch (Exception e)
- {
- _logger.LogError($"QueryAllRolesAsync error: {e.Message}");
- throw;
- }
-
- return response;
- }
-
-
- /// <summary>
- /// 查询角色的权限
- /// </summary>
- /// <param name="roleId"></param>
- /// <returns></returns>
- public async Task<QueryPermissionByRoleIdResponse> QueryPermissionByRoleIdAsync(int roleId)
- {
- var response = new QueryPermissionByRoleIdResponse();
- //查询权限ids
- var permissionIds = await _wrapper.RolePermission
- .FindByCondition(_ => _.RoleId == roleId && _.IsDeleted == false)
- .Select(_ => _.PermissionId).ToListAsync();
- if (permissionIds.Any())
- {
- foreach (var id in permissionIds)
- {
- var permission = _wrapper.Permission.FindByCondition(_ => _.Id == id && _.IsDeleted == false)
- .FirstOrDefault();
- var permissionModel = _mapper.Map<PermissionModel>(permission);
- response.PermissionModels.Add(permissionModel);
- }
- }
-
- return response;
- }
-
-
- /// <summary>
- /// 新增角色
- /// </summary>
- /// <param name="request"></param>
- public async Task AddRoleAsync(AddRoleRequest request)
- {
- //开启事务
- await using var transaction = await _wrapper.StartTransactionAsync();
- try
- {
- if (request.RoleIds.Any())
- {
- //插入角色
- var role = new Role()
- {
- Name = request.Name,
- CreateBy= request.CreateBy
- };
- _wrapper.Role.Create(role);
- //这里提前保存是为了拿到数据库中该对象的id.
- await _wrapper.SaveChangeAsync();
- //先插rolePermission表
- foreach (var p in request.RoleIds)
- {
- var rolePermission = new RolePermission()
- {
- RoleId = role.Id,
- PermissionId = p
- };
- _wrapper.RolePermission.Create(rolePermission);
- }
- }
- else
- {
- var role = _mapper.Map<Role>(request);
- _wrapper.Role.Create(role);
- }
-
- await _wrapper.SaveChangeAsync();
- await transaction.CommitAsync();
- }
- catch (Exception e)
- {
- await transaction.RollbackAsync();
- _logger.LogError("AddRoleAsync error.");
- throw;
- }
- }
- }

- using AutoMapper;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json;
- using org.huage.AuthManagement.BizManager.Helper;
- using org.huage.AuthManagement.BizManager.Redis;
- using org.huage.AuthManagement.BizManager.wrapper;
- using org.huage.AuthManagement.DataBase.Table;
- using org.huage.AuthManagement.Entity.Common;
- using org.huage.AuthManagement.Entity.Managers;
- using org.huage.AuthManagement.Entity.Model;
- using org.huage.AuthManagement.Entity.Request;
- using org.huage.AuthManagement.Entity.Response;
-
- namespace org.huage.AuthManagement.BizManager.Manager;
-
- //用户管理
- public class UserManager : IUserManager
- {
- private readonly IRepositoryWrapper _wrapper;
- private readonly IRedisManager _redisManager;
- private readonly ILogger<UserManager> _logger;
- private readonly IMapper _mapper;
-
- public UserManager(IMapper mapper, ILogger<UserManager> logger, IRedisManager redisManager, IRepositoryWrapper wrapper)
- {
- _mapper = mapper;
- _logger = logger;
- _redisManager = redisManager;
- _wrapper = wrapper;
- }
-
-
- /// <summary>
- /// 根据id查询用户
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public async Task<UserModel> QueryUserById(int id)
- {
- var user = _wrapper.User.FindByCondition(_=>_.Id==id).FirstOrDefault();
- if (user is null)
- return null;
-
- var userModel = _mapper.Map<UserModel>(user);
- return userModel;
- }
-
- /// <summary>
- /// 根据手机号查询用户
- /// </summary>
- /// <param name="phone"></param>
- /// <returns></returns>
- public async Task<UserModel> QueryUserByPhone(string phone)
- {
- var user = _wrapper.User.FindByCondition(_=>_.Phone == phone).FirstOrDefault();
- if (user is null)
- return null;
-
- var userModel = _mapper.Map<UserModel>(user);
- return userModel;
- }
-
- /// <summary>
- /// 新增用户,用户至少归属于一个组织
- /// </summary>
- /// <param name="request"></param>
- /// <exception cref="Exception"></exception>
- public async Task<UserModel> AddUserAsync(int organizationId, AddUserRequest request)
- {
- try
- {
- if (string.IsNullOrEmpty(request.UserName) || string.IsNullOrEmpty(request.PassWord))
- throw new UserException("Account and pwd is must.");
- if (string.IsNullOrEmpty(request.Phone))
- throw new UserException("Phone & OrgCode is required");
-
- //密码加密
- request.PassWord = PwdBCrypt.Encryption(request.PassWord);
-
- //判断用户表是否存在该用户
- var existOrNot = _wrapper.User.FindByCondition(_ => _.Phone.Equals(request.Phone )&& _.UserName.Equals(request.UserName))
- .FirstOrDefault();
- if (existOrNot is not null)
- {
- //判断关联表是否存在该用户
- var organizationUser = _wrapper.OrganizationUser
- .FindByCondition(_ => _.UserId == existOrNot.Id && _.OrganizationId == organizationId)
- .FirstOrDefault();
- if (organizationUser is not null)
- {
- //说明该用户已经存在
- throw new UserException("该用户已存在");
- }
- }
-
- //删除缓存
- await _redisManager.DelKey(RedisKeyGenerator.AllUsersRedisKey());
- var user = _mapper.Map<User>(request);
- _wrapper.User.Create(user);
- await _wrapper.SaveChangeAsync();
-
- //
- await _redisManager.DelKey(RedisKeyGenerator.AllUsersRedisKey());
-
- var userModel = _mapper.Map<UserModel>(user);
- return userModel;
-
- }
- catch (Exception _)
- {
- _logger.LogError($"Excuse AddUserAsync error: {_.Message}");
- throw;
- }
- }
-
-
-
- /// <summary>
- /// 更新用户信息
- /// </summary>
- /// <param name="request"></param>
- public async Task UpdateUserAsync(UpdateUserRequest request)
- {
- var user = _wrapper.User.FindByCondition(_ => _.Phone == request.Phone && _.IsDeleted == false).FirstOrDefault();
- if (user is null)
- {
- //user not exist
- return;
- }
- if (! string.IsNullOrEmpty(request.PassWord))
- {
- request.PassWord = PwdBCrypt.Encryption(request.PassWord);
- }
-
- if (string.Equals(user.UserName,request.UserName) && string.Equals(user.PassWord,request.PassWord) && string.Equals(user.Phone,request.Phone) && string.Equals(user.Remark,request.Remark))
- {
- //data not change
- return;
- }
- //set value
- if (!string.IsNullOrEmpty(request.UserName))
- {
- user.UserName = request.UserName;
- }
- if (!string.IsNullOrEmpty(request.PassWord))
- {
- user.PassWord = request.PassWord;
- }
- if (!string.IsNullOrEmpty(request.Phone))
- {
- user.Phone = request.Phone;
- }
- if (!string.IsNullOrEmpty(request.Remark))
- {
- user.Remark = request.Remark;
- }
- user.UpdateTime=DateTime.Now;
- _wrapper.User.Update(user);
- await _wrapper.SaveChangeAsync();
- }
-
- /// <summary>
- /// 批量删除用户
- /// </summary>
- /// <param name="ids"></param>
- /// <exception cref="Exception"></exception>
- public async Task DeleteBatchUserAsync(List<int> ids)
- {
- var list =await _wrapper.User.FindByCondition(x=>ids.Contains(x.Id)).ToListAsync();
- foreach (var item in list)
- {
- item.IsDeleted = true;
- _wrapper.User.Update(item);
- }
- await _wrapper.SaveChangeAsync();
- }
-
- /// <summary>
- /// 查询用户拥有的角色
- /// </summary>
- /// <param name="organizationId"></param>
- /// <param name="userId">用户id</param>
- /// <returns></returns>
- public async Task<QueryRoleByUserIdResponse> QueryRoleByUserIdAsync(int organizationId,int userId)
- {
- var response = new QueryRoleByUserIdResponse();
- //拿到角色列表
- var roleIds =await _wrapper.UserRole.FindByCondition(_=>_.UserId==userId && _.OrganizationId==organizationId && _.IsDeleted==false)
- .Select(_=>_.RoleId).ToListAsync();
- if (roleIds.Any())
- {
- foreach (var roleId in roleIds)
- {
- //拿到具体的角色
- var role = _wrapper.Role.FindByCondition(_=>_.Id==roleId && _.IsDeleted==false).FirstOrDefault();
- var roleModel = _mapper.Map<RoleModel>(role);
- response.RoleModels.Add(roleModel);
- }
- }
-
- return response;
- }
-
-
- /// <summary>
- /// 查询所有的用户
- /// </summary>
- /// <returns></returns>
- public async Task<List<UserModel>> QueryAllUsersAsync()
- {
- var response = new List<UserModel>();
- try
- {
- var allUsers = await _redisManager.HGetAllValue<User>(RedisKeyGenerator.AllUsersRedisKey());
- if (allUsers.Any())
- {
- response = _mapper.Map<List<UserModel>>(allUsers);
- return response;
- }
-
- //查数据库,并设置redis;
- var users = _wrapper.User.FindAll().Where(_ => _.IsDeleted == false).ToList();
- response = _mapper.Map<List<UserModel>>(users);
-
- var usersDic = users.ToDictionary(_ => _.Id);
-
- await usersDic.ParallelForEachAsync(async user =>
- {
- var redisKey = RedisKeyGenerator.AllUsersRedisKey();
- try
- {
- foreach (var s in users)
- {
- await _redisManager.HashSet(redisKey, user.Key.ToString(),
- JsonConvert.SerializeObject(user.Value));
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e.Message);
- }
- });
- }
- catch (Exception e)
- {
- _logger.LogError("QueryAllUsersAsync error: {e.Message}");
- throw;
- }
-
- return response;
- }
-
- public void QueryUserByCondition(QueryUserByConditionRequest request)
- {
-
- }
- }

- using System.Text.RegularExpressions;
- using AutoMapper;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json;
- using org.huage.AuthManagement.BizManager.Redis;
- using org.huage.AuthManagement.BizManager.wrapper;
- using org.huage.AuthManagement.DataBase.Table;
- using org.huage.AuthManagement.Entity.Common;
- using org.huage.AuthManagement.Entity.Managers;
- using org.huage.AuthManagement.Entity.Model;
- using org.huage.AuthManagement.Entity.Request;
- using org.huage.AuthManagement.Entity.Response;
-
- namespace org.huage.AuthManagement.BizManager.Manager;
-
- //组织管理
- public class OrganizationManager : IOrganizationManager
- {
- private readonly IRepositoryWrapper _wrapper;
- private readonly IRedisManager _redisManager;
- private readonly ILogger<OrganizationManager> _logger;
- private readonly IMapper _mapper;
- private readonly IUserManager _userManager;
-
- public OrganizationManager(IRepositoryWrapper wrapper, IRedisManager redisManager,
- ILogger<OrganizationManager> logger, IMapper mapper,IUserManager userManager)
- {
- _wrapper = wrapper;
- _redisManager = redisManager;
- _logger = logger;
- _mapper = mapper;
- _userManager = userManager;
- }
-
-
- /// <summary>
- /// 查询该组织的用户,以及用户对应的角色:
- /// 1.查询该组织下的用户
- /// 2.查询用户角色
- /// </summary>
- /// <param name="organizationId"></param>
- public async Task<QueryOrganizationUserAndRoleResponse> QueryOrganizationAllUserAndRoleAsync(int organizationId)
- {
- var response = new QueryOrganizationUserAndRoleResponse();
- try
- {
- //查询缓存
- var organizationUsers =
- await _redisManager.HGetAllValue<OrganizationUserAndRole>(RedisKeyGenerator.OrganizationAllUserAndRole(organizationId));
-
- if (organizationUsers.Any())
- {
- response.Users = organizationUsers;
- return response;
- }
-
- //1.从中间表中查询出该组织对应的用户有那些,然后拿到用户信息
- var userIdList = await _wrapper.OrganizationUser
- .FindByCondition(_ => _.OrganizationId == organizationId && _.IsDeleted == false).Select(_ => _.UserId)
- .ToListAsync();
- //2.拿到所有的用户
- if (userIdList.Any())
- {
- foreach (var userId in userIdList)
- {
- //拿到用户
- var user = _wrapper.User.FindByCondition(_ => _.Id == userId && _.IsDeleted==false).FirstOrDefault();
- if (user is null)
- {
- continue;
- }
- var realUser = _mapper.Map<OrganizationUserAndRole>(user);
-
- //拿到该用户的角色id列表
- var ids = await _wrapper.UserRole
- .FindByCondition(_ => organizationId == _.OrganizationId && userId == _.UserId)
- .Select(_ => _.RoleId).ToListAsync();
-
- foreach (var id in ids)
- {
- //拿到角色
- var role = _wrapper.Role.FindByCondition(_ => _.Id == id).FirstOrDefault();
- //添加进入集合
- var roleModel = _mapper.Map<RoleModel>(role);
- realUser.RoleModels?.Add(roleModel);
- }
-
- //加入返回结果集
- response.Users.Add(realUser);
- }
- }
-
- var userAndRoles = response.Users.ToDictionary(_ => _.Id);
-
- //添加缓存
- await userAndRoles.ParallelForEachAsync(async ur =>
- {
- var redisKey = RedisKeyGenerator.OrganizationAllUserAndRole(organizationId);
- try
- {
- foreach (var s in response.Users)
- {
- await _redisManager.HashSet(redisKey, RedisKeyGenerator.OrganizationUser(ur.Key),
- JsonConvert.SerializeObject(ur.Value));
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e.Message);
- }
- });
- }
- catch (Exception e)
- {
- _logger.LogError($"Excuse QueryOrganizationUserAndRole error: {e.Message}");
- throw;
- }
-
- return response;
- }
-
-
- //查询所有的组织
- public async Task<QueryAllOrganizationResponse> QueryAllOrganizationAsync()
- {
- var response = new QueryAllOrganizationResponse();
- try
- {
- //查缓存
- var value = await _redisManager.HGetAllValue<Organization>(RedisKeyGenerator.AllOrganizationsRedisKey());
- if (value.Any())
- {
- response.OrganizationModels = _mapper.Map<List<OrganizationModel>>(value);
- return response;
- }
-
- //查询数据库
- var organizationList = await _wrapper.Organization.FindByCondition(_ => _.IsDeleted == false).ToListAsync();
- response.OrganizationModels = _mapper.Map<List<OrganizationModel>>(organizationList);
-
- //设置缓存
- var organizationDic = organizationList.ToDictionary(_ => _.Id);
- await organizationDic.ParallelForEachAsync(async organization =>
- {
- var redisKey = RedisKeyGenerator.AllOrganizationsRedisKey();
- try
- {
- foreach (var s in organizationDic)
- {
- await _redisManager.HashSet(redisKey, organization.Key.ToString(),
- JsonConvert.SerializeObject(organization.Value));
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e.Message);
- }
- });
- }
- catch (Exception e)
- {
- _logger.LogError($"QueryAllOrganizationAsync error: {e.Message}");
- throw;
- }
-
- return response;
- }
-
- /// <summary>
- /// 查询该组织明细
- /// </summary>
- /// <param name="organizationId"></param>
- /// <returns></returns>
- public async Task<OrganizationModel> QueryOrganizationDetailAsync(int organizationId)
- {
- var organization = _wrapper.Organization.FindByCondition(_ => _.Id == organizationId).FirstOrDefault();
- return _mapper.Map<OrganizationModel>(organization);
- }
-
-
- /// <summary>
- /// 批量删除
- /// </summary>
- /// <param name="ids"></param>
- public async Task<bool> BatchDeleteOrganizationByIdAsync(List<int> ids)
- {
- if (!ids.Any())
- return false;
-
- foreach (var id in ids)
- {
- var first = _wrapper.Organization.FindByCondition(_ => _.Id == id && _.IsDeleted==false).FirstOrDefault();
- if (first is not null)
- {
- //逻辑删除
- first.IsDeleted = true;
- _wrapper.Organization.Update(first);
-
- //删除关联表organizationUser
- var organizationUserList = await _wrapper.OrganizationUser.FindByCondition(_=>_.OrganizationId==id && _.IsDeleted==false).ToListAsync();
- if (organizationUserList.Any())
- {
- foreach (var organizationUser in organizationUserList)
- {
- //逻辑删除
- organizationUser.IsDeleted = true;
- _wrapper.OrganizationUser.Update(organizationUser);
- }
- }
- }
- }
-
- return true;
-
- }
-
- /// <summary>
- /// 组织添加用户:添加用户的时候,可以选择是否给该用户配角色
- /// </summary>
- /// <summary>
- /// 比如说A组织创建了一个用户a,然后用户表插入了一个用户(手机号唯一),接着在organizationUser表加入一条id, A.ID , a.id的的数据;
- /// 然后我们给该A组织的a用户设置角色的时候,我们去UserRole表加入一条数据:userid,roleId,organizationId.
- ///
- /// 这时候B组织把a也加入自己的组织了,给该用户设置B组织a用户的权限:在UserRole角色表里面加入一条,userid,roleId,organizationId.
- /// 希望解决同一个用户在不同系统拥有不同的权限:逻辑就是组织添加用户的时候,加入organizationUser表,并且需要给其授予角色(默认是游客),也可以从用户表中挑选用户;
- /// </summary>
- public async Task<bool> OrganizationAddUserAsync(AddOrganizationUserRequest request)
- {
- if (!IsValidOrgCode(request.OrganizationId.ToString()))
- throw new OrganizationException("OrganizationId invalid,please fill in valid orgCode");
- if (string.IsNullOrEmpty(request.UserModel.Phone))
- throw new OrganizationException("Phone is required.");
-
- //开启事务
- await using var transaction = await _wrapper.StartTransactionAsync();
-
- try
- {
- //添加用户
- var addUser = await _userManager.AddUserAsync(request.OrganizationId, request.UserModel);
-
- //添加OrganizationUser
- var organizationUserModel = new OrganizationUserModel()
- {
- OrganizationId = request.OrganizationId,
- UserId = addUser.Id
- };
- var organizationUser = _mapper.Map<OrganizationUser>(organizationUserModel);
- _wrapper.OrganizationUser.Create(organizationUser);
-
- //添加UserRole
- if (request.RoleModels != null && request.RoleModels.Any())
- {
- foreach (var role in request.RoleModels)
- {
- var userRoleModel = new UserRoleModel()
- {
- UserId = addUser.Id,
- OrganizationId = request.OrganizationId,
- RoleId = role.Id
- };
- var userRole = _mapper.Map<UserRole>(userRoleModel);
- _wrapper.UserRole.Create(userRole);
- }
- }
- else
- {
- //设置该用户默认角色为游客
- var ur = new UserRoleModel()
- {
- UserId = addUser.Id,
- OrganizationId = request.OrganizationId,
- RoleId = 2
- };
- var userRole = _mapper.Map<UserRole>(ur);
- _wrapper.UserRole.Create(userRole);
- }
-
- await _wrapper.SaveChangeAsync();
-
- await transaction.CommitAsync();
- }
- catch (UserException ex)
- {
- await transaction.RollbackAsync();
- _logger.LogError(ex.Message);
- throw;
- }
- catch (Exception e)
- {
- //发生异常回滚
- await transaction.RollbackAsync();
- _logger.LogError($"Excuse OrganizationAddUser error: {e.Message}");
- throw;
- }
-
- return true;
- }
-
-
- /// <summary>
- /// 新增组织
- /// </summary>
- /// <param name="request"></param>
- /// <exception cref="Exception"></exception>
- public async Task AddOrganizationAsync(AddOrganizationRequest request)
- {
- try
- {
- //params check
- if (string.IsNullOrEmpty(request.OrgCode) ||
- string.IsNullOrEmpty(request.Name))
- {
- throw new OrganizationException("组织名称和组织注册编码不能为空");
- }
-
- if (string.IsNullOrEmpty(request.Version))
- {
- request.Version = "v1";
- }
-
- //mapping
- var organization = _mapper.Map<Organization>(request);
- _wrapper.Organization.Create(organization);
- await _wrapper.SaveChangeAsync();
- }
- catch (Exception e)
- {
- _logger.LogError($"Excuse AddOrganization error: {e.Message}");
- throw;
- }
- }
-
- /// <summary>
- /// 判断传进来的营业执照是否有效,这里可以根据自己的业务具体实现,当前假设为邮箱
- /// </summary>
- /// <param name="orgCode"></param>
- /// <returns></returns>
- private bool IsValidOrgCode(string orgCode)
- {
- var regex = new Regex("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
- return regex.IsMatch(orgCode);
- }
- }

- namespace org.huage.AuthManagement.Api.Controllers;
- [ApiController]
- [Route("/[controller]/[action]")]
- public class OrganizationController : Controller
- {
- private readonly IOrganizationManager _organizationManager;
- private readonly ILogger<OrganizationController> _logger;
-
- public OrganizationController(IOrganizationManager organizationManager, ILogger<OrganizationController> logger)
- {
- _organizationManager = organizationManager;
- _logger = logger;
- }
-
-
- [HttpPost]
- public async Task<bool> OrganizationAddUser(AddOrganizationUserRequest request)
- {
- try
- {
- return await _organizationManager.OrganizationAddUserAsync(request);
- }
- catch (OrganizationException ex)
- {
- _logger.LogError(
- $"Error in org.huage.Service.OrganizationManager.OrganizationController.OrganizationAddUser. {ex.Message}");
- throw;
- }
- catch (Exception e)
- {
- var organizationExceptionException = new OrganizationException(e.Message);
- _logger.LogError(
- $"Error in org.huage.Service.OrganizationManager.OrganizationController.OrganizationAddUser.");
- throw organizationExceptionException;
- }
- }
- }

备注:查全量数据的时候都集成了Redis,经过postman本地测试,基本所有接口响应时间都可以控制在50ms内,基于Redis查全量数据的时候能控制在10ms以内。
完整项目地址:(整理中,后续贴上)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。