BAS_PRService岗位和角色服务:
public class BAS_PRService { //岗位 private IRepositoryirepositorypost; //角色 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 IRepositoryirepositoryrole; //用户角色 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(Listusernos,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(Listdepartmentnames,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(Listpostnames,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 IRepositoryirepositoryuser; //标识容器 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; //部门仓储 IRepositorydepartmentrepository = 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; IRepositorypostrepository = 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; IRepositorydepartmentrepository = 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; IRepositorydepartmentrepository = 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")); } }}