实现权限的领域对象:BAS_Permission
public partial class BAS_Permission:AggreateRoot { private IRepository<BAS_Permission> irepository; public BAS_Permission(IRepository<BAS_Permission> irepository) { this.irepository = irepository; } /// <summary> /// 创建权限 /// </summary> /// <param name="name"></param> /// <param name="codeproperty">[Name,UnitPrice]</param> /// <param name="operationtype">0</param> /// <param name="value">["Filed":"UntiPrice","Operator":"Equals","Value":"5000"]</param> /// <param name="description"></param> /// <param name="per_id"></param> public void CreatePermission(string name,string codeproperty,OperationType operationtype, string value,string description,Guid per_id) { var bas_permission = new BAS_Permission(); bas_permission.Id = base.Id; bas_permission.Name = name; bas_permission.Description = description; bas_permission.CodeProperty = codeproperty; bas_permission.CodeValue = value; bas_permission.Per_Id = per_id; irepository.Create(bas_permission); } /// <summary> /// 根据权限名获取权限信息 /// </summary> /// <param name="name"></param> /// <returns></returns> public BAS_Permission GetPermissionByName(string name) { return irepository.GetByCondition(p => p.Name == name, p => true) .SingleOrDefault(); } }
权限集合的领域对象:BAS_PermissionSet
public partial class BAS_PermissionSet:AggreateRoot { private IRepository<BAS_PermissionSet> irepository; public BAS_PermissionSet(IRepository<BAS_PermissionSet> irepository) { this.irepository = irepository; } /// <summary> /// 创建权限集对象 /// </summary> /// <param name="name"></param> /// <param name="description"></param> /// <param name="per_id"></param> public void CreatePermissionSet(string name,string description,Guid per_id) { var bas_permissionset = new BAS_PermissionSet(); bas_permissionset.Id = base.Id; bas_permissionset.Name = name; bas_permissionset.Description = description; bas_permissionset.Per_Id = per_id; irepository.Create(bas_permissionset); } /// <summary> /// 根据权限集名获取权限集信息 /// </summary> /// <param name="name"></param> /// <returns></returns> public BAS_PermissionSet GetPermissionSetByName(string name) { return irepository.GetByCondition(p => p.Name == name, p => true).SingleOrDefault(); } }
权限和权限集合对应的关系:
public partial class BAS_PPSet:AggreateRoot { private IRepository<BAS_PPSet> irepository; public BAS_PPSet(IRepository<BAS_PPSet> irepository) { this.irepository = irepository; } public BAS_PPSet() { } /// <summary> /// 添加多个权限到权限集中 /// </summary> /// <param name="permissions"></param> /// <param name="permissionset"></param> public void CreateBAS_PPS(List<BAS_Permission> permissions,BAS_PermissionSet permissionset) { foreach(var permission in permissions) { var bas_ppset = new BAS_PPSet(); bas_ppset.Id = base.Id; bas_ppset.BAS_Permission = permission; bas_ppset.BAS_PermissionSet = permissionset; irepository.Create(bas_ppset); } } /// <summary> /// 根据权限查找PPSET /// </summary> /// <param name="permission"></param> /// <returns></returns> public List<BAS_PPSet> GetppsetByPermission(BAS_Permission permission) { return irepository.GetByCondition(p => p.BAS_Permission.Id == permission.Id, p => true); } /// <summary> /// 根据权限集查找PPSET /// </summary> /// <param name="permission"></param> /// <returns></returns> public List<BAS_PPSet> GetppsetByPermissionSet(BAS_PermissionSet permissionset) { return irepository.GetByCondition(p => p.BAS_PermissionSet.Id == permissionset.Id, p => true); } }
权限容器服务:
public partial class BAS_PermissionConatiner:AggreateRoot { private IRepository<BAS_PermissionConatiner> irepository; public BAS_PermissionConatiner(IRepository<BAS_PermissionConatiner> irepository) { this.irepository = irepository; } public void CreatePermissionContainer(Guid per_id) { var bas_permissioncontainer = new BAS_PermissionConatiner(); bas_permissioncontainer.Id = per_id; irepository.Create(bas_permissioncontainer); } }
权限服务:BAS_PermissionService
public class BAS_PermissionService { private IRepository<BAS_Permission> irepositorypermission; private IRepository<BAS_PermissionConatiner> irepositorypermissioncontainer; public BAS_PermissionService(IRepository<BAS_Permission> irepositorypermission, IRepository<BAS_PermissionConatiner> irepositorypermissioncontainer) { this.irepositorypermission = irepositorypermission; this.irepositorypermissioncontainer = irepositorypermissioncontainer; } /// <summary> /// 创建权限 /// </summary> /// <param name="name"></param> /// <param name="codeproperty"></param> /// <param name="operationtype"></param> /// <param name="value"></param> /// <param name="description"></param> public void CreatePermission(string name,string codeproperty,OperationType operationtype,string value,string description) { var bas_permission = new BAS_Permission(irepositorypermission); var per_id = Guid.NewGuid(); bas_permission.CreatePermission(name, codeproperty, operationtype, value, description, per_id); var bas_permissioncontainer = new BAS_PermissionConatiner(irepositorypermissioncontainer); bas_permissioncontainer.CreatePermissionContainer(per_id); } }
权限和权限集合的服务:BAS_PPSetService
public class BAS_PPSetService { private IRepository<BAS_Permission> irepositorypermission; private IRepository<BAS_PermissionSet> irepositorypermissionset; private IRepository<BAS_PPSet> irepositoryppset; BAS_PPSet bas_ppset; public BAS_PPSetService(IRepository<BAS_Permission> irepositorypermission, IRepository<BAS_PermissionSet> irepositorypermissionset, IRepository<BAS_PPSet> irepositoryppset) { this.irepositorypermission = irepositorypermission; this.irepositorypermissionset = irepositorypermissionset; this.irepositoryppset = irepositoryppset; bas_ppset = new BAS_PPSet(irepositoryppset); } /// <summary> /// 创建多个权限到权限集中 /// </summary> /// <param name="permissionnames"></param> /// <param name="permissionsetname"></param> public void CreateBAS_PPS(string[] permissionnames,string permissionsetname) { var listpermission = new List<BAS_Permission>(); for(int i=0;i<permissionnames.Length;i++) { var permission = irepositorypermission.GetByCondition(p => p.Name == permissionnames[i], p => true).SingleOrDefault(); listpermission.Add(permission); } var permissionset = irepositorypermissionset.GetByCondition(p => p.Name == permissionsetname, p => true).SingleOrDefault(); bas_ppset.CreateBAS_PPS(listpermission, permissionset); } /// <summary> /// 根据权限名获取PPSET /// </summary> /// <param name="permissionname"></param> /// <returns></returns> public List<BAS_PPSet> GEtppsetbyPermissionName(string permissionname) { var permission = irepositorypermission.GetByCondition(p => p.Name == permissionname, p => true) .SingleOrDefault(); return bas_ppset.GetppsetByPermission(permission); } /// <summary> /// 根据权限集名获取PPSET /// </summary> /// <param name="permissionsetname"></param> /// <returns></returns> public List<BAS_PPSet> GEtppsetbyPermissionSetName(string permissionsetname) { var permissionset = irepositorypermissionset.GetByCondition(p => p.Name == permissionsetname, p => true) .SingleOrDefault(); return bas_ppset.GetppsetByPermissionSet(permissionset); } }
BAS_PermissionSetService:
public class BAS_PermissionSetService { private IRepository<BAS_PermissionSet> irepositorypermissionset; private IRepository<BAS_Permission> irepositorypermission; private IRepository<BAS_PPSet> irepositoryppset; private IRepository<BAS_PermissionConatiner> irepositorypermissioncontainer; BAS_PermissionSet bas_permissionset; BAS_PPSet bas_ppset; public BAS_PermissionSetService(IRepository<BAS_PermissionSet> irepositorypermissionset, IRepository<BAS_Permission> irepositorypermission, IRepository<BAS_PPSet> irepositoryppset, IRepository<BAS_PermissionConatiner> irepositorypermissioncontainer) { this.irepositorypermission = irepositorypermission; this.irepositorypermissioncontainer = irepositorypermissioncontainer; this.irepositorypermissionset = irepositorypermissionset; this.irepositoryppset = irepositoryppset; bas_permissionset = new BAS_PermissionSet(irepositorypermissionset); bas_ppset = new BAS_PPSet(irepositoryppset); } /// <summary> /// 创建权限集 /// </summary> /// <param name="name"></param> /// <param name="description"></param> public void CreatePermissionSet(string name,string description) { var per_id = Guid.NewGuid(); bas_permissionset.CreatePermissionSet(name, description, per_id); var permissioncontainer = new BAS_PermissionConatiner(irepositorypermissioncontainer); permissioncontainer.CreatePermissionContainer(per_id); } /// <summary> /// 将多个权限添加到权限集中 /// </summary> /// <param name="permissionnames"></param> /// <param name="permissionsetname"></param> public void AddPermissionToPermissionSet(List<string> permissionnames, string permissionsetname) { var permissionset = bas_permissionset.GetPermissionSetByName(permissionsetname); var permissions =new List<BAS_Permission>(); foreach(var permissionname in permissionnames) { var bas_permission = new BAS_Permission(irepositorypermission); var permission = bas_permission.GetPermissionByName(permissionname); permissions.Add(permission); } bas_ppset.CreateBAS_PPS(permissions, permissionset); } /// <summary> /// 根据权限名获取权限集的信息 /// </summary> /// <param name="permissionname"></param> /// <returns></returns> public List<BAS_PermissionSet> GetPermissionSetByPermissionName(string permissionname) { var ppsets = new BAS_PPSetService(irepositorypermission, irepositorypermissionset, irepositoryppset) .GEtppsetbyPermissionName(permissionname); var listpermissionset = new List<BAS_PermissionSet>(); foreach(var ppset in ppsets) { var permissionset = irepositorypermissionset.GetByCondition (p => p.Id == ppset.BAS_PermissionSet.Id, p => true).SingleOrDefault(); listpermissionset.Add(permissionset); } return listpermissionset; } /// <summary> /// 判断某个权限是否在某个权限集中 /// </summary> /// <param name="permissionname"></param> /// <param name="permissionsetname"></param> /// <returns></returns> public bool IsPermissionSetContainPermission(string permissionname, string permissionsetname) { return GetPermissionSetByPermissionName(permissionname). Contains(bas_permissionset.GetPermissionSetByName(permissionsetname)); } }
在DDD.Application 应用服务:PermissionAppService
public class PermissionAppService { IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext)) as IRepositoryContext; IRepository<BAS_Permission> permissionrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_Permission>)) as IRepository<BAS_Permission>; IRepository<BAS_PermissionConatiner> permissioncontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_PermissionConatiner>)) as IRepository<BAS_PermissionConatiner>; BAS_PermissionService bas_permissionservice; BAS_Permission bas_permission; public PermissionAppService() { bas_permissionservice = new BAS_PermissionService (permissionrepository, permissioncontainerrepository); bas_permission = new BAS_Permission(permissionrepository); } /// <summary> /// 权限的创建 /// </summary> /// <param name="name"></param> /// <param name="description"></param> /// <param name="codeproperty"></param> /// <param name="codevalue"></param> /// <param name="operationtype"></param> public void CreatePermission(string name,string description,string codeproperty, string codevalue,OperationType operationtype) { bas_permissionservice.CreatePermission(name, codeproperty, operationtype, codevalue, description); context.Commit(); } /// <summary> /// 根据权限名获取权限信息 /// </summary> /// <param name="name"></param> /// <returns></returns> public BAS_Permission GetPermissionByName(string name) { return bas_permission.GetPermissionByName(name); } public void CreatePermission(string v1, string v2, string v3, string v4, object operationType) { throw new NotImplementedException(); } }
PermissionSetAppService
public class PermissionSetAppService { IRepositoryContext context = ServiecLocator.Instance.GetService(typeof(IRepositoryContext)) as IRepositoryContext; IRepository<BAS_Permission> permissionrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_Permission>)) as IRepository<BAS_Permission>; IRepository<BAS_PermissionConatiner> permissioncontainerrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_PermissionConatiner>)) as IRepository<BAS_PermissionConatiner>; IRepository<BAS_PermissionSet> permissionsetrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_PermissionSet>)) as IRepository<BAS_PermissionSet>; IRepository<BAS_PPSet> ppsetrepository = ServiecLocator.Instance.GetService(typeof(IRepository<BAS_PPSet>)) as IRepository<BAS_PPSet>; BAS_PermissionSetService bas_permissionsetservice; BAS_PermissionSet bas_permissionset; public PermissionSetAppService() { bas_permissionsetservice = new BAS_PermissionSetService(permissionsetrepository, permissionrepository, ppsetrepository, permissioncontainerrepository); bas_permissionset = new BAS_PermissionSet(permissionsetrepository); } /// <summary> /// 创建权限集 /// </summary> /// <param name="name"></param> /// <param name="description"></param> public void CreatePermissionSet(string name,string description) { bas_permissionsetservice.CreatePermissionSet(name, description); context.Commit(); } /// <summary> /// 根据权限集名获取权限集信息 /// </summary> /// <param name="name"></param> /// <returns></returns> public BAS_PermissionSet GetPermissionSetByName(string name) { return bas_permissionset.GetPermissionSetByName(name); } /// <summary> /// 添加多个权限到权限集 /// </summary> /// <param name="permissionnames"></param> /// <param name="permissionsetname"></param> public void AddPermissionToPermissionSet(string[] permissionnames,string permissionsetname) { bas_permissionsetservice.AddPermissionToPermissionSet(permissionnames .ToList(), permissionsetname); context.Commit(); } /// <summary> /// 判断某个权限是否在某个权限集中 /// </summary> /// <param name="permissionname"></param> /// <param name="permissionsetname"></param> /// <returns></returns> public bool IsPermissionSetContainpermission(string permissionname, string permissionsetname) { return bas_permissionsetservice.IsPermissionSetContainPermission(permissionname, permissionsetname); } }
测试代码:
[TestMethod] public void AddPermission() { PermissionAppService permissionservice = new PermissionAppService(); permissionservice.CreatePermission("产品信息权限", "代表一个产品权限信息", "[ProductName,UnitPrice]", "[{"Field":"UnitPrice","Operator":"Equal","Value":"10","Relation":"And"}]", Domain.OperationType.Read); Assert.IsNotNull(permissionservice.GetPermissionByName("产品信息权限")); } [TestMethod] public void AddPermissionSet() { PermissionSetAppService permissionsetservice = new PermissionSetAppService(); permissionsetservice.CreatePermissionSet("普通用户权限集", "代表普通用户的一个权限集"); Assert.IsNotNull(permissionsetservice.GetPermissionSetByName("普通用户权限集")); } [TestMethod] public void AddPermissionToPermissionSet() { PermissionSetAppService permissionsetservice = new PermissionSetAppService(); string[] permissionnames = new string[1]; permissionnames[0] = "产品信息权限"; permissionsetservice.AddPermissionToPermissionSet(permissionnames, "普通用户权限集"); Assert.IsTrue(permissionsetservice.IsPermissionSetContainpermission("产品信息权限", "普通用户权限集")); }