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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【实例简介】 项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发,简洁而不简单,实用至上,并且所写每一行代码都经过深思熟虑,符合SOLID规则! ####当前版本 3.0 alpha版(2017-2-7) 采用全新工作流,实现自定义表单处理; 2.0版(2016-10-31) 支持多流程模板; 增加Ace admin界面支持 秀外 输入图片说明 输入图片说明 输入图片说明 慧中 教科书级的分层思想,哪怕苛刻的你阅读的是大神级精典大作(如:《企业应用架构模式》《重构与模式》《ASP.NET设计模式》等),你也可以参考本项目。不信?有图为证,Resharper自动生成的项目引用关系,毫无PS痕迹! 输入图片说明 实用 符合国情的RBAC(基于角色的访问控制),可以直接应用到你的系统。 权限资源 菜单权限 经理和业务员登陆系统拥有的功能菜单是不一样的 按钮权限 经理能够审批,而业务员不可以 数据权限 A业务员看不到B业务员的单据 字段权限 某些人查询客户信息时看不到客户的手机号或其它字段 用户应用系统的具体操作者,我这里设计用户是可以直接给用户分配菜单/按钮,也可以通过角色分配权限。 角色为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,以上所有的权限资源都可以分配给角色,角色和用户N:N的关系。 机构树形的公司部门结构,国内公司用的比较多,它实际上就是一个用户组,机构和用户设计成N:N的关系,也就是说有时候一个用户可以从属于两个部门,这种情况在我们客户需求中的确都出现过。 ####系统工程结构: OpenAuth.Domain 系统领域层 OpenAuth.Repository 系统仓储层,用于数据库操作 OpenAuth.App 应用层,为界面提供接口 OpenAuth.Mvc 采用基于jquery与bootstrap的B-JUI界面 OpenAuth.UnitTest 单元测试 Infrastructure 通用工具集合 ####使用 管理员可直接在登录界面点击基于精典DDD权限管理 - 点击以开发者账号登录登录; 普通应用账号使用:test(密码:test)登录; ####后续 更多狂野的功能,正在玩命加载中,敬请期待... 更多文档正在整理中.... 当然,如果你想学习完整的DDD框架,可以参考我的另一个项目(BestQ&A--开源中国推荐项目/集CQRS AES等DDD高级特性于一体的问答系统) 【实例截图】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值