博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DDD领域模型数据访问权限之用户权限(十)
阅读量:4656 次
发布时间:2019-06-09

本文共 21064 字,大约阅读时间需要 70 分钟。

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]; } }

 在工程DDD.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"));        }    }}

 

转载于:https://www.cnblogs.com/sunliyuan/p/7868626.html

你可能感兴趣的文章