DDD领域模型数据访问权限之用户权限(十)

网友投稿 679 2022-11-10

DDD领域模型数据访问权限之用户权限(十)

DDD领域模型数据访问权限之用户权限(十)

BAS_PRService岗位和角色服务:

public class BAS_PRService { //岗位 private IRepository irepositorypost; //角色 private IRepository irepositoryrole; //岗位和角色 private IRepository irepositorypr; BAS_PR bas_pr; public BAS_PRService(IRepository irepositorypost, IRepository irepositoryrole, IRepository irepositorypr) { this.irepositorypost = irepositorypost; this.irepositoryrole = irepositoryrole; this.irepositorypr = irepositorypr; bas_pr = new BAS_PR(irepositorypr); } ///

/// 将多个岗位添加到角色中 /// /// /// public void CreateBAS_PR(string[] postnames,string rolename) { var listpost = new List(); for(int i=0;i p.Name == postnames[i], p => true) .SingleOrDefault(); listpost.Add(post); } var role = irepositoryrole.GetByCondition(p => p.Name == rolename, p => true).SingleOrDefault(); bas_pr.CreateBAS_PR(listpost, role); } /// /// 根据岗位名获取PR信息 /// /// /// public List GetPRSByPostName(string postname) { var post = irepositorypost.GetByCondition(p => p.Name == postname, p => true). SingleOrDefault(); return bas_pr.GetPRSByPost(post); } /// /// 根据角色名获取PR信息 /// /// /// public List GetPRSByRoleName(string rolename) { var role = irepositoryrole.GetByCondition(p => p.Name == rolename, p => true) .SingleOrDefault(); return bas_pr.GetPRSByRole(role); } }

在基础机构层DDD.Infrastructure添加SessionHelper的帮助类:

public class SessionHelper { ///

/// 添加 Session /// /// /// public static void AddSession(string strsessionname,string strvalue) { HttpContext.Current.Session[strsessionname] = strvalue; HttpContext.Current.Session.Timeout = 600; } /// /// 添加多个Session值 /// /// /// public static void AddSession(string strsessioinname,string[] strvalues) { HttpContext.Current.Session[strsessioinname] = strvalues; HttpContext.Current.Session.Timeout = 600; } /// /// 得到Session的值 /// /// /// public static string[] Gets(string strsessionname) { if (HttpContext.Current.Session[strsessionname] == null) return null; return (string[])HttpContext.Current.Session[strsessionname]; } }

.Domain.DomainService中新建:BAS_RoleService服务类:

public class BAS_RoleService { //角色 private IRepository irepositoryrole; //用户角色 private IRepository irepositoryuser; //部门 private IRepository irepositorydepartment; //岗位 private IRepository irepositorypost; //标识容器 private IRepository irepositoryidentitycontainer; //角色和用户 private IRepository irepositoryur; //角色和部门 private IRepository irepositorydr; //角色和岗位 private IRepository irepositorypr; BAS_Role bas_role; //构造函数 public BAS_RoleService(IRepository irepositoryrole, IRepository irepositoryuser, IRepository irepositorydepartment, IRepository irepositorypost, IRepository irepositoryidentitycontainer, IRepository irepositoryur, IRepository irepositorydr, IRepository irepositorypr) { this.irepositoryrole = irepositoryrole; this.irepositoryidentitycontainer = irepositoryidentitycontainer; this.irepositoryuser = irepositoryuser; this.irepositorydepartment = irepositorydepartment; this.irepositorypost = irepositorypost; this.irepositoryur = irepositoryur; this.irepositorydr = irepositorydr; this.irepositorypr = irepositorypr; bas_role = new BAS_Role(irepositoryrole); } ///

/// 创建角色 /// /// /// public void CreateRole(string name,string description) { var con_id = Guid.NewGuid(); bas_role.CreateRole(name, description, con_id); var bas_identitycontainer = new BAS_IdentityContianer(irepositoryidentitycontainer); bas_identitycontainer.CreateIdentityContainer(con_id); } /// /// 将多个用户添加到角色 /// /// /// public void AddUserToRole(List usernos,string rolename) { var role = bas_role.GetRoleByName(rolename); var users = new List(); foreach(var userno in usernos) { var user = new BAS_User(irepositoryuser).GetUserByNo(userno); users.Add(user); } new BAS_UR(irepositoryur).CreateBAS_UR(users, role); } /// /// 将多个部门添加到角色 /// /// /// public void AddDepartmentToRole(List departmentnames,string rolename) { var role = bas_role.GetRoleByName(rolename); var departments = new List(); foreach(var departmentname in departmentnames) { var department = new BAS_Department(irepositorydepartment).GetDepartmentByName(departmentname); departments.Add(department); } new BAS_DR(irepositorydr).CreateBAS_DR(departments, role); } /// /// 将多个岗位添加到角色 /// /// /// public void AddPostToRole(List postnames,string rolename) { var role = bas_role.GetRoleByName(rolename); var posts = new List(); foreach(var postname in postnames) { var post = new BAS_Post(irepositorypost).GetPostByName(postname); posts.Add(post); } new BAS_PR(irepositorypr).CreateBAS_PR(posts, role); } /// /// 根据用户NO获取用户所属角色 /// /// /// public List GetRoleByUserNo(string no) { var urs = new BAS_URService(irepositoryuser, irepositoryrole, irepositoryur) .GetURSByUserNo(no); var roles = new List(); foreach(var ur in urs) { var role = irepositoryrole.GetByCondition(p => p.Id == ur.BAS_Role.Id, p => true).SingleOrDefault(); roles.Add(role); } return roles; } /// /// 用户是否在一个角色中 /// /// /// /// public bool IsRoleContainUser(string no,string rolename) { return GetRoleByUserNo(no).Contains(bas_role.GetRoleByName(rolename)); } /// /// 根据部门名获取所属的角色 /// /// /// public List GetRoleByDepartmentName(string departmentname) { var drs = new BAS_DRService(irepositorydepartment, irepositoryrole, irepositorydr) .GetDRSByDepartmentName(departmentname); var roles = new List(); foreach(var dr in drs) { var role = irepositoryrole.GetByCondition(p => p.Id == dr.BAS_Role.Id, p => true) .SingleOrDefault(); roles.Add(role); } return roles; } /// /// 某一个部门是否在一个角色中 /// /// /// /// public bool IsRoleContainDepartment(string departmentname,string rolename) { return GetRoleByDepartmentName(departmentname).Contains(bas_role.GetRoleByName(rolename)); } /// /// 根据岗位名获取所属角色信息 /// /// /// public List GetRoleByPostName(string postname) { var prs = new BAS_PRService(irepositorypost, irepositoryrole, irepositorypr) .GetPRSByPostName(postname); var roles = new List(); foreach(var pr in prs) { var role = irepositoryrole.GetByCondition(p => p.Id == pr.BAS_Role.Id, p => true) .SingleOrDefault(); roles.Add(role); } return roles; } /// /// 判断岗位是否在角色中 /// /// /// /// public bool IsRoleContainPost(string postname,string rolename) { return GetRoleByPostName(postname).Contains(bas_role.GetRoleByName(rolename)); } }

创建DomainService服务类:

public class BAS_UserService { //用户仓储 private IRepository irepositoryuser; //标识容器 private IRepository irepositoryidentitycontainer; //角色 private IRepository irepositoryrole; //部门信息 private IRepository irepositorydepartment; //岗位信息 private IRepository irepositorypost; //用户角色 private IRepository irepositoryur; //用户对应的岗位 private IRepository irepositoryudp; //部门对应的角色 private IRepository irepositorydr; //岗位对应的角色 private IRepository irepositorypr; BAS_User bas_user; public BAS_UserService(IRepository irepositoryuser, IRepository irepositoryidentitycontainer, IRepository irepositoryrole, IRepository irepositorydepartment, IRepository irepositorypost, IRepository irepositoryur, IRepository irepositoryudp, IRepository irepositorydr, IRepository irepositorypr) { this.irepositoryuser = irepositoryuser; this.irepositoryrole = irepositoryrole; this.irepositorydepartment = irepositorydepartment; this.irepositorypost = irepositorypost; this.irepositoryidentitycontainer = irepositoryidentitycontainer; this.irepositoryur = irepositoryur; this.irepositoryudp = irepositoryudp; this.irepositorydr = irepositorydr; this.irepositorypr = irepositorypr; bas_user = new BAS_User(irepositoryuser); } ///

/// 创建用户 /// /// /// /// /// public void CreateUser(string no,string name,string mobile,string password) { var con_id = Guid.NewGuid(); bas_user.CreateUser(no, name, mobile, con_id,password); var bas_identitycontainer = new BAS_IdentityContianer(irepositoryidentitycontainer); bas_identitycontainer.CreateIdentityContainer(con_id); } /// /// 用户登录 /// /// /// /// public bool UserLogin(string no,string password) { //用户登录验证 var loginresult = bas_user.LoginVerify(no, password); if(loginresult) { SessionHelper.AddSession("UserNo", no); var conids = GetUserAllCon_Id(no); var sconids = new string[conids.Count]; for(int i=0;i /// 得到用户的所有ID /// /// /// private List GetUserAllCon_Id(string no) { var userallcon_ids = new List(); //获取用户自身的Con_id userallcon_ids.Add(bas_user.GetUserByNo(no).Con_Id); // 获取用户所属角色的Con_id var roleservice = new BAS_RoleService(irepositoryrole, irepositoryuser, irepositorydepartment, irepositorypost, irepositoryidentitycontainer, irepositoryur, irepositorydr, irepositorypr); //获取用户所属的角色 var userroles = roleservice.GetRoleByUserNo(no); userallcon_ids.AddRange(userroles.Select(p => p.Con_Id)); //获取用户所属的部门 var departmentservice = new BAS_DepartmentService(irepositorydepartment, irepositoryidentitycontainer, irepositoryudp, irepositoryuser); var userdepartments = departmentservice.GetDepartmentByUserNo(no); userallcon_ids.AddRange(userdepartments.Select(p => p.Con_Id)); //获取部门所属的角色 foreach(var userdepartment in userdepartments) { var roles = roleservice.GetRoleByDepartmentName(userdepartment.Name); userallcon_ids.AddRange(roles.Select(p => p.Con_Id)); } //获取用户所属的岗位 var postservice = new BAS_PostService(irepositorypost, irepositoryidentitycontainer, irepositoryuser, irepositoryudp); var userposts = postservice.GetPostsByUserNO(no); userallcon_ids.AddRange(userposts.Select(p => p.Con_Id)); foreach (var post in userposts) { var roles = roleservice.GetRoleByPostName(post.Name); userallcon_ids.AddRange(roles.Select(p => p.Con_Id)); } return userallcon_ids; } }

添加应用层的服务:DDD.Application工程  (DepartmentAppService)

public class DepartmentAppService { IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext)) as IRepositoryContext; //部门仓储 IRepository departmentrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; //标识容器仓储 IRepository identitycontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; //用户岗位部门仓储 IRepository udprepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; //用户仓储 IRepository userrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; //调用领域服务 BAS_DepartmentService departmentservice; BAS_Department bas_department; //构造函数 public DepartmentAppService() { departmentservice = new BAS_DepartmentService(departmentrepository, identitycontainerrepository, udprepository, userrepository); bas_department = new BAS_Department(departmentrepository); } ///

/// 部门创建 /// /// /// public void CreateDepartment(string name,string description) { departmentservice.CreateDepartment(name, description); context.Commit(); } /// /// 根据部门名获取部门信息 /// /// /// public BAS_Department GetDepartmentByName(string name) { return bas_department.GetDepartmentByName(name); } }

PostAppService应用层服务:

public class PostAppService { IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext)) as IRepositoryContext; IRepository postrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; IRepository identitycontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; IRepository userrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository udprepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; BAS_PostService postservice; BAS_Post bas_post; public PostAppService() { postservice = new BAS_PostService(postrepository, identitycontainerrepository, userrepository, udprepository); bas_post = new BAS_Post(postrepository); } ///

/// 岗位创建 /// /// /// public void CreatePost(string name,string description) { postservice.CreatePost(name, description); context.Commit(); } /// /// 根据岗位名返回岗位对象 /// /// /// public BAS_Post GetPostByName(string name) { return bas_post.GetPostByName(name); } }

添加RoleAppService应用层的服务:

public class RoleAppService { IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext)) as IRepositoryContext; IRepository departmentrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; IRepository identitycontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; IRepository rolerepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository userrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository postrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository urrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository drrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository prrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; BAS_RoleService roleserivice; BAS_Role bas_role; public RoleAppService() { roleserivice = new BAS_RoleService(rolerepository, userrepository, departmentrepository, postrepository, identitycontainerrepository, urrepository, drrepository, prrepository); bas_role = new BAS_Role(rolerepository); } ///

/// 角色创建 /// /// /// public void CreateRole(string name,string description) { roleserivice.CreateRole(name, description); context.Commit(); } /// /// 根据角色名返回角色 /// /// /// public BAS_Role GetRoleByName(string name) { return bas_role.GetRoleByName(name); } /// /// 添加用户到角色 /// /// /// public void AddUserToRole(string [] usernos,string rolename) { roleserivice.AddUserToRole(usernos.ToList(), rolename); context.Commit(); } /// /// 添加部门到角色 /// /// /// public void AddDepartmentToRole(string [] departmentnames,string rolename) { roleserivice.AddDepartmentToRole(departmentnames.ToList(), rolename); context.Commit(); } /// /// 添加岗位到角色 /// /// /// public void AddPostToRole(string [] postnames,string rolename) { roleserivice.AddPostToRole(postnames.ToList(), rolename); context.Commit(); } /// /// 角色是否包含某个用户 /// /// /// /// public bool IsRoleContainUser(string userno,string rolename) { return roleserivice.IsRoleContainUser(userno, rolename); } /// /// 角色是否包含某个部门 /// /// /// /// public bool IsRoleContainDepartment(string departmentname,string rolename) { return roleserivice.IsRoleContainDepartment(departmentname, rolename); } /// /// 角色是否包含某个岗位 /// /// /// /// public bool IsRoleContainPost(string postname,string rolename) { return roleserivice.IsRoleContainPost(postname, rolename); } }

UserAppService应用层的服务:

public class UserAppService { IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext)) as IRepositoryContext; IRepository departmentrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; IRepository identitycontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository)) as IRepository; IRepository rolerepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository userrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository postrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository urrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository drrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository prrepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; IRepository udprepository = ServiecLocator.Instance.GetService(typeof(IRepository))as IRepository; BAS_UserService bas_userservice; BAS_User bas_user; BAS_UDPService udpservice; public UserAppService() { bas_userservice = new BAS_UserService(userrepository, identitycontainerrepository, rolerepository, departmentrepository, postrepository, urrepository, udprepository, drrepository, prrepository); bas_user = new BAS_User(userrepository); udpservice = new BAS_UDPService(udprepository, userrepository, departmentrepository, postrepository); } ///

/// 用户创建 /// /// /// /// /// public void CreateUser(string no,string name,string mobile,string password) { bas_userservice.CreateUser(no, name, mobile, password); context.Commit(); } /// /// 根据用户NO获取用户对象 /// /// /// public BAS_User GetUserByNo(string no) { return bas_user.GetUserByNo(no); } /// /// 将用户添加到部门与岗位 /// /// /// /// /// public void CreateDepartmentPostToUser(string userno,string departmentname,string postname ,bool ismain) { udpservice.CreateDepartmentPostToUser(userno, departmentname, postname, ismain); context.Commit(); } /// /// 根据部门,用户与岗位信息获取三者连接信息 /// /// /// /// /// public List GetUDPByDepartmentUserPost(string departmentname,string userno, string postname) { return udpservice.GetUdpByDepartment(departmentname) .Concat(udpservice.GetUdpByPost(postname)).Concat (udpservice.GetUdpByUser(userno)).ToList(); } }

如何在T4模板中生成同一个上下文:

添加一下代码:public partial class SalesOrdersModelContainer : DbContext

添加WebApp连接数据库的配置:

单元测试代码:

namespace DDD.UnitTest{ [TestClass] public class PermissionTest { [TestMethod] public void CreateUser() { UserAppService userappservice = new UserAppService(); userappservice.CreateUser("10", "孙", "1359333", "pass"); Assert.IsNotNull(userappservice.GetUserByNo("10")); } [TestMethod] public void CreateDepartment() { DepartmentAppService departmentservice = new DepartmentAppService(); departmentservice.CreateDepartment("财务中心", "进行财务核算与管理"); Assert.IsNotNull(departmentservice.GetDepartmentByName("财务中心")); } [TestMethod] public void CreatePost() { PostAppService postservice = new PostAppService(); postservice.CreatePost("高级会计师", "高级会计师"); Assert.IsNotNull(postservice.GetPostByName("高级会计师")); } [TestMethod] public void CreateDepartmentPostToUser() { UserAppService userservice = new UserAppService(); userservice.CreateDepartmentPostToUser("10", "财务中心", "高级会计师", true); Assert.IsNotNull(userservice.GetUDPByDepartmentUserPost("财务中心", "10", "高级会计师")); } [TestMethod] public void CreateRole() { RoleAppService roleservice = new RoleAppService(); roleservice.CreateRole("角色1", "具有某些权限的角色"); Assert.IsNotNull(roleservice.GetRoleByName("角色1")); } [TestMethod] public void AddUserToRole() { RoleAppService roleservice = new RoleAppService(); string[] usernos = new string[1]; usernos[0] = "10"; roleservice.AddUserToRole(usernos, "角色1"); Assert.IsTrue(roleservice.IsRoleContainUser("10", "角色1")); } [TestMethod] public void AddDepartmentToRole() { RoleAppService roleservice = new RoleAppService(); string[] departmentnames = new string[1]; departmentnames[0] = "财务中心"; roleservice.AddDepartmentToRole(departmentnames, "角色1"); Assert.IsTrue(roleservice.IsRoleContainDepartment("财务中心", "角色1")); } [TestMethod] public void AddPostToRole() { RoleAppService roleservice = new RoleAppService(); string[] postnames = new string[1]; postnames[0] = "高级会计师"; roleservice.AddPostToRole(postnames, "角色1"); Assert.IsTrue(roleservice.IsRoleContainPost("高级会计师", "角色1")); } }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MVCJSONJQuery分页实现
下一篇:DDD领域模型系统的工作流(十四)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~