using System; using System.Collections.Generic; using System.Linq; using OpenAuth.App.Response; using OpenAuth.Repository.Domain; namespace OpenAuth.App { public class OrgManagerApp : BaseApp { /// /// 添加部门 /// /// The org. /// System.Int32. /// 未能找到该组织的父节点信息 public string Add(Org org) { ChangeModuleCascade(org); Repository.Add(org); return org.Id; } public string Update(Org org) { ChangeModuleCascade(org); //获取旧的的CascadeId var cascadeId = Repository.FindSingle(o => o.Id == org.Id).CascadeId; //根据CascadeId查询子部门 var orgs = Repository.Find(u => u.CascadeId.Contains(cascadeId) && u.Id != org.Id) .OrderBy(u => u.CascadeId).ToList(); //更新操作 UnitWork.Update(org); //更新子部门的CascadeId foreach (var a in orgs) { ChangeModuleCascade(a); UnitWork.Update(a); } return org.Id; } /// /// 删除指定ID的部门及其所有子部门 /// public void DelOrg(string[] ids) { var delOrg = Repository.Find(u => ids.Contains(u.Id)).ToList(); foreach (var org in delOrg) { Repository.Delete(u => u.CascadeId.Contains(org.CascadeId)); } } /// /// 加载特定用户的角色 /// TODO:这里会加载用户及用户角色的所有角色,“为用户分配角色”功能会给人一种混乱的感觉,但可以接受 /// /// The user unique identifier. public List LoadForUser(string userId) { //用户角色 var userRoleIds = UnitWork.Find(u => u.FirstId == userId && u.Key == "UserRole").Select(u => u.SecondId).ToList(); //用户角色与自己分配到的角色ID var moduleIds = UnitWork.Find( u => (u.FirstId == userId && u.Key == "UserOrg") || (u.Key == "RoleOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList(); if (!moduleIds.Any()) return new List(); return UnitWork.Find(u => moduleIds.Contains(u.Id)).ToList(); } /// /// 加载特定角色的角色 /// /// The role unique identifier. public List LoadForRole(string roleId) { var moduleIds = UnitWork.Find(u => u.FirstId == roleId && u.Key == "RoleOrg") .Select(u => u.SecondId) .ToList(); if (!moduleIds.Any()) return new List(); return UnitWork.Find(u => moduleIds.Contains(u.Id)).ToList(); } /// /// 得到部门的所有子部门 /// 如果orgId为空,表示取得所有部门 /// public TableData LoadAllChildren(string orgId) { string cascadeId = ".0."; if (!string.IsNullOrEmpty(orgId)) { var org = Repository.FindSingle(u => u.Id == orgId); if (org == null) throw new Exception("未能找到指定对象信息"); cascadeId = org.CascadeId; } var query = Repository.Find(u => u.CascadeId.Contains(cascadeId)); return new TableData { data = query.ToList(), count = query.Count(), }; } } }