using System; using System.Collections.Generic; using OpenAuth.App.Interface; using OpenAuth.App.Response; using OpenAuth.Repository.Domain; using OpenAuth.Repository.Interface; using System.Linq; using System.Threading.Tasks; using Infrastructure; using Microsoft.EntityFrameworkCore; using OpenAuth.App.Request; using OpenAuth.Repository; namespace OpenAuth.App { public class RoleApp : BaseStringApp { private RevelanceManagerApp _revelanceApp; /// /// 加载当前登录用户可访问的全部角色 /// public List Load(QueryRoleListReq request) { var loginUser = _auth.GetCurrentUser(); var roles = loginUser.Roles; if (!string.IsNullOrEmpty(request.key)) { roles = roles.Where(u => u.Name.Contains(request.key)).ToList(); } return roles; } /// /// 获取所有的角色 /// 为了控制权限,通常只用于流程实例选择执行角色,其他地方请使用Load /// public async Task> LoadAll(QueryRoleListReq request) { var result = new TableResp(); var objs = UnitWork.Find(null); if (!string.IsNullOrEmpty(request.key)) { objs = objs.Where(u => u.Name.Contains(request.key)); } result.data = await objs.OrderBy(u => u.Name) .Skip((request.page - 1) * request.limit) .Take(request.limit).ToListAsync(); result.count = await objs.CountAsync(); return result; } /// /// 添加角色,如果当前登录用户不是System,则直接把新角色分配给当前登录用户 /// public void Add(RoleView obj) { UnitWork.ExecuteWithTransaction(() => { Role role = obj; role.CreateTime = DateTime.Now; UnitWork.Add(role); UnitWork.Save(); obj.Id = role.Id; //要把保存后的ID存入view //如果当前账号不是SYSTEM,则直接分配 var loginUser = _auth.GetCurrentUser(); if (loginUser.User.Account != Define.SYSTEM_USERNAME) { _revelanceApp.Assign(new AssignReq { type = Define.USERROLE, firstId = loginUser.User.Id, secIds = new[] {role.Id} }); } }); } /// /// 删除角色时,需要删除角色对应的权限 /// /// public override void Delete(string[] ids) { UnitWork.ExecuteWithTransaction(() => { UnitWork.Delete(u=>(u.Key == Define.ROLEMODULE || u.Key == Define.ROLEELEMENT) && ids.Contains(u.FirstId)); UnitWork.Delete(u=>u.Key == Define.USERROLE && ids.Contains(u.SecondId)); UnitWork.Delete(u =>ids.Contains(u.Id)); UnitWork.Save(); }); } /// /// 更新角色属性 /// /// public void Update(RoleView obj) { Role role = obj; UnitWork.Update(u => u.Id == obj.Id, u => new Role { Name = role.Name, Status = role.Status }); } public RoleApp(IUnitWork unitWork, IRepository repository, RevelanceManagerApp app,IAuth auth) : base(unitWork, repository, auth) { _revelanceApp = app; } } }