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

实现权限的领域对象: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("产品信息权限", "普通用户权限集"));
        }


原文地址:https://www.cnblogs.com/sunliyuan/p/7875172.html