zoukankan      html  css  js  c++  java
  • DDD领域模型数据访问权限(九)

    权限分为:数据权限和功能权限

    数据权限:

    查询提供附加表达式的支持:

    //提供附加表达式的支持
            List<TAggreateRoot> GetByCondition(Expression<Func<TAggreateRoot, bool>> condition,
            Expression<Func<TAggreateRoot,bool>> definecondition);
            //返回聚合根分页的方法
            List<TAggreateRoot> GetByConditionPages(Expression<Func<TAggreateRoot, bool>> condition,
                Expression<Func<TAggreateRoot, bool>> definecondition,
                RequestPage request, out int totalcount);
            List<TAggreateRoot> GetByConditionPages(List<Conditions> condition, 
                Expression<Func<TAggreateRoot, bool>> definecondition,
                RequestPage request, out int totalcount);
            List<TDTO> GetByCondition<TDTO>(Expression<Func<TAggreateRoot, bool>> condition,
                Expression<Func<TAggreateRoot, bool>> definecondition);
            List<TDTO> GetByConditionPages<TDTO>(Expression<Func<TAggreateRoot, bool>> condition,
                Expression<Func<TAggreateRoot, bool>> definecondition,
        RequestPage request, out int totalcount);
            List<TDTO> GetByConditionPages<TDTO>(List<Conditions> condition, 
                Expression<Func<TAggreateRoot, bool>> definecondition,
    RequestPage request, out int totalcount);
    

    不需要查询条件的写法: 

     var query = orderdbcontext.Set<TAggreateRoot>().Where(condition.And(definecondition));
    

     在工程DDD.Domain新建文件夹ModelPermission: BAS_Department类

      public partial class BAS_Department:AggreateRoot
        {
            private IRepository<BAS_Department> irepository;
            public BAS_Department(IRepository<BAS_Department> irepository)
            {
                this.irepository = irepository;
            }
    
            /// <summary>
            /// 创建部门对象
            /// </summary>
            /// <param name="name"></param>
            /// <param name="description"></param>
            /// <param name="con_id"></param>
            public void CreateDepartment(string name,string description,Guid con_id)
            {
                var bas_department = new BAS_Department();
                bas_department.Id = base.Id;
                bas_department.Name = name;
                bas_department.Description = description;
                bas_department.Con_Id = con_id;
                irepository.Create(bas_department);
            }
    
            /// <summary>
            /// 根据部门名称返回部门对象
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public BAS_Department GetDepartmentByName(string name)
            {
                return irepository.GetByCondition(p => p.Name == name, p => true).SingleOrDefault();
            }
        }
    

     BAS_DR类:

     public partial class BAS_DR:AggreateRoot
        {
            private IRepository<BAS_DR> irepository;
            public BAS_DR(IRepository<BAS_DR> irepository)
            {
                this.irepository = irepository;
            }
            public BAS_DR() { }
    
            /// <summary>
            /// 创建DR对象,将多个部门添加到角色中
            /// </summary>
            /// <param name="departments"></param>
            /// <param name="role"></param>
            public void CreateBAS_DR(List<BAS_Department> departments,BAS_Role role)
            {
                foreach(var department in departments)
                {
                    var bas_dr = new BAS_DR();
                    bas_dr.Id = base.Id;
                    bas_dr.BAS_Department = department;
                    bas_dr.BAS_Role = role;
                    irepository.Create(bas_dr);
                }
            }
    
            /// <summary>
            /// 根据部门对象获取对应的DR信息
            /// </summary>
            /// <param name="department"></param>
            /// <returns></returns>
            public List<BAS_DR> GetDRSByDepartment(BAS_Department department)
            {
                return irepository.GetByCondition(p => p.BAS_Department.Id == department.Id,p=>true);
            }
    
            /// <summary>
            /// 根据角色对象获取对应的DR信息
            /// </summary>
            /// <param name="role"></param>
            /// <returns></returns>
            public List<BAS_DR> GetDRSByRole(BAS_Role role)
            {
                return irepository.GetByCondition(p => p.BAS_Role.Id == role.Id, p => true);
            }
        }
    }
    

     BAS_IdentityContainer类:

      public partial class BAS_IdentityContianer:AggreateRoot
        {
            private IRepository<BAS_IdentityContianer> irepository;
            public BAS_IdentityContianer(IRepository<BAS_IdentityContianer> irepository)
            {
                this.irepository = irepository;
            }
    
            /// <summary>
            /// 创建标识容器对象
            /// </summary>
            /// <param name="con_id"></param>
            public void CreateIdentityContainer(Guid con_id)
            {
                var bas_identitycontainer = new BAS_IdentityContianer();
                bas_identitycontainer.Id = con_id;
                irepository.Create(bas_identitycontainer);
            }
    
           
        }
    

     BAS_Post类:

        public partial class BAS_Post:AggreateRoot
        {
            private IRepository<BAS_Post> irepository;
            public BAS_Post(IRepository<BAS_Post> irepository)
            {
                this.irepository = irepository;
            }
    
            /// <summary>
            /// 创建岗位对象
            /// </summary>
            /// <param name="name"></param>
            /// <param name="description"></param>
            /// <param name="con_id"></param>
            public void CreatePost(string name,string description,Guid con_id)
            {
                var bas_post = new BAS_Post();
                bas_post.Id = base.Id;
                bas_post.Name = name;
                bas_post.Description = description;
                bas_post.Con_Id = con_id;
                irepository.Create(bas_post);
            }
    
            /// <summary>
            /// 根据岗位名返回岗位对象
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public BAS_Post GetPostByName(string name)
            {
                return irepository.GetByCondition(p => p.Name == name, p => true).SingleOrDefault();
            }
        }
    

     BAS_PR类:

    public partial class BAS_PR:AggreateRoot
        {
            public IRepository<BAS_PR> irepository;
            public  BAS_PR(IRepository<BAS_PR> irepository)
            {
                this.irepository = irepository;
            }
    
            public BAS_PR() { }
    
            /// <summary>
            /// 创建PR对象,将多个岗位添加到角色中
            /// </summary>
            /// <param name="posts"></param>
            /// <param name="role"></param>
            public void CreateBAS_PR(List<BAS_Post> posts,BAS_Role role)
            {
                foreach(var post in posts)
                {
                    var bas_pr = new BAS_PR();
                    bas_pr.Id = base.Id;
                    bas_pr.BAS_Post = post;
                    bas_pr.BAS_Role = role;
                    irepository.Create(bas_pr);
                }
            }
    
            /// <summary>
            /// 根据岗位对象获取PR信息
            /// </summary>
            /// <param name="post"></param>
            /// <returns></returns>
            public List<BAS_PR> GetPRSByPost(BAS_Post post)
            {
                return irepository.GetByCondition(p => p.BAS_Post.Id == post.Id, p => true);
            }
    
            /// <summary>
            /// 根据角色对象获取PR信息
            /// </summary>
            /// <param name="role"></param>
            /// <returns></returns>
            public List<BAS_PR> GetPRSByRole(BAS_Role role)
            {
                return irepository.GetByCondition(p => p.BAS_Role.Id == role.Id, p => true);
            }
        }
    

     BAS_Role类:

     public partial class BAS_Role:AggreateRoot
        {
            private IRepository<BAS_Role> irepository;
            public BAS_Role(IRepository<BAS_Role> irepository)
            {
                this.irepository = irepository;
            }
    
            /// <summary>
            /// 创建角色对象
            /// </summary>
            /// <param name="name"></param>
            /// <param name="description"></param>
            /// <param name="con_id"></param>
            public void CreateRole(string name,string description,Guid con_id)
            {
                var bas_role = new BAS_Role();
                bas_role.Id = base.Id;
                bas_role.Name = name;
                bas_role.Description = description;
                bas_role.Con_Id = con_id;
                irepository.Create(bas_role);
            }
            /// <summary>
            /// 根据角色名返回角色对象
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public BAS_Role GetRoleByName(string name)
            {
                return irepository.GetByCondition(p => p.Name == name, p => true).SingleOrDefault();
            }
        }
    }
    

       BAS_UDPSet类:

    public partial class BAS_UDPSet:AggreateRoot
        {
            private IRepository<BAS_UDPSet> irepository;
            public BAS_UDPSet(IRepository<BAS_UDPSet> irepository)
            {
                this.irepository = irepository;
            }
    
            public BAS_UDPSet() { }
    
            /// <summary>
            /// 创建UDP对象,将用户添加到某个部门某个岗位
            /// </summary>
            /// <param name="user"></param>
            /// <param name="department"></param>
            /// <param name="post"></param>
            /// <param name="ismain">是否为主部门主岗位</param>
            public void CreateDepartmentPostToUser(BAS_User user,BAS_Department department,
                BAS_Post post,bool ismain)
            {
                var udp = new BAS_UDPSet();
                udp.Id = base.Id;
                udp.BAS_Department = department;
                udp.BAS_Post = post;
                udp.BAS_User = user;
                udp.IsMain = ismain;
                irepository.Create(udp);
            }
    
            /// <summary>
            /// 根据部门获取对应的UDP信息
            /// </summary>
            /// <param name="department"></param>
            /// <returns></returns>
            public List<BAS_UDPSet> GetUDPByDepartment(BAS_Department department)
            {
                return irepository.GetByCondition(p => p.BAS_Department.Id == department.Id,
                    p => true);
            }
    
            /// <summary>
            /// 根据用户获取对应的UDP信息
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public List<BAS_UDPSet> GetUDPByUser(BAS_User user)
            {
                return irepository.GetByCondition(p => p.BAS_User.Id == user.Id, p => true);
            }
    
            /// <summary>
            /// 根据岗位获取对应的UDP信息
            /// </summary>
            /// <param name="post"></param>
            /// <returns></returns>
            public List<BAS_UDPSet> GetUDPByPost(BAS_Post post)
            {
                return irepository.GetByCondition(p => p.BAS_Post.Id == post.Id, p => true);
            }
        }
    

     BAS_UR类:

       public partial class BAS_UR:AggreateRoot
        {
            private IRepository<BAS_UR> irepository;
            public BAS_UR(IRepository<BAS_UR> irepository)
            {
                this.irepository = irepository;
            }
            public BAS_UR() { }
    
            /// <summary>
            /// 创建UR对象,将多个用户添加到角色中
            /// </summary>
            /// <param name="users"></param>
            /// <param name="role"></param>
            public void CreateBAS_UR(List<BAS_User> users,BAS_Role role)
            {
                foreach(var user in users)
                {
                    var bas_ur = new BAS_UR();
                    bas_ur.Id = base.Id;
                    bas_ur.BAS_User = user;
                    bas_ur.BAS_Role = role;
                    irepository.Create(bas_ur);
                }
            }
            /// <summary>
            /// 根据用户对象获取对应的UR信息
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public List<BAS_UR> GetURSByUser(BAS_User user)
            {
                return irepository.GetByCondition(p => p.BAS_User.Id == user.Id, p => true);
            }
    
            public List<BAS_UR> GetURSByRole(BAS_Role role)
            {
                return irepository.GetByCondition(p => p.BAS_Role.Id == role.Id, p => true);
            }
        }
    

     BAS_User类:

      public partial class BAS_User:AggreateRoot
        {
            private IRepository<BAS_User> irepository;
            public BAS_User(IRepository<BAS_User> irepository)
            {
                this.irepository = irepository;
            }
    
            /// <summary>
            /// 在仓储中创建用户对象
            /// </summary>
            /// <param name="no"></param>
            /// <param name="name"></param>
            /// <param name="mobile"></param>
            /// <param name="con_id"></param>
            /// <param name="password"></param>
            public void CreateUser(string no,string name,string mobile,Guid con_id,string password)
            {
                BAS_User bas_user = new BAS_User();
                bas_user.Id = base.Id;
                bas_user.No = no;
                bas_user.Name = name;
                bas_user.Mobile = mobile;
                bas_user.Con_Id = con_id;
                var userlogin = new BAS_UserLogin(password);
                bas_user.BAS_UserLogin = userlogin;
                irepository.Create(bas_user);
            }
    
            /// <summary>
            /// 根据用户NO返回用户对象
            /// </summary>
            /// <param name="no"></param>
            /// <returns></returns>
            public BAS_User GetUserByNo(string no)
            {
                return irepository.GetByCondition(p => p.No == no, p => true).SingleOrDefault();
            }
    
            /// <summary>
            /// 用户登录验证
            /// </summary>
            /// <param name="userno"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public bool LoginVerify(string userno,string password)
            {
                return irepository.GetByCondition(p => p.No == No && p.BAS_UserLogin.Password == password,
                    p => true).Count == 1;
            }
        }
    

     BAS_UserLogin类:

     public partial class BAS_UserLogin:ValueObject
        {
            public BAS_UserLogin(string password)
            {
                Id = base.Id;
                Password = password;
            }
        }
    

     部门的领域服务:BAS_DepartmentService

     public class BAS_DepartmentService
        {
            private IRepository<BAS_Department> irepositorydepartment;
            private IRepository<BAS_IdentityContianer> irepositoryidentitycontainer;
            private IRepository<BAS_UDPSet> irepositoryudp;
            private IRepository<BAS_User> irepositoryuser;
    
            public BAS_DepartmentService(IRepository<BAS_Department> irepositorydepartment,
            IRepository<BAS_IdentityContianer> irepositoryidentitycontainer,
            IRepository<BAS_UDPSet> irepositoryudp,
            IRepository<BAS_User> irepositoryuser)
            {
                this.irepositorydepartment = irepositorydepartment;
                this.irepositoryidentitycontainer = irepositoryidentitycontainer;
                this.irepositoryudp = irepositoryudp;
                this.irepositoryuser = irepositoryuser;
            }
    
            /// <summary>
            /// 协调创建部门与标识容器对象
            /// </summary>
            /// <param name="name"></param>
            /// <param name="description"></param>
            public void CreateDepartment(string name,string description)
            {
                var bas_department = new BAS_Department(irepositorydepartment);
                var con_id = Guid.NewGuid();
                bas_department.CreateDepartment(name, description, con_id);
    
                var bas_identitycontainer = new BAS_IdentityContianer(irepositoryidentitycontainer);
                bas_identitycontainer.CreateIdentityContainer(con_id);
            }
    
            public List<BAS_Department> GetDepartmentByUserNo(string no)
            {
                var udps = new BAS_UDPService(irepositoryudp, irepositoryuser,
                    irepositorydepartment, null).GetUdpByUser(no);
                var departments = new List<BAS_Department>();
                foreach(var udp in udps)
                {
                    var department = irepositorydepartment.GetByCondition(p => p.Id == udp.BAS_Department.Id, p => true).SingleOrDefault();
                    departments.Add(department);
                }
                return departments;
            }
        }
    
    中间服务UDP:BAS_UDPService
    public class BAS_UDPService
        {
            private IRepository<BAS_UDPSet> irepositoryudp;
            private IRepository<BAS_User> irepositoryuser;
            private IRepository<BAS_Department> irepositorydepartment;
            private IRepository<BAS_Post> irepositorypost;
            BAS_UDPSet udp;
            public BAS_UDPService( IRepository<BAS_UDPSet> irepositoryudp,
            IRepository<BAS_User> irepositoryuser,
            IRepository<BAS_Department> irepositorydepartment,
            IRepository<BAS_Post> irepositorypost)
            {
                this.irepositoryudp = irepositoryudp;
                this.irepositoryuser = irepositoryuser;
                this.irepositorydepartment = irepositorydepartment;
                this.irepositorypost = irepositorypost;
    
                udp = new BAS_UDPSet(irepositoryudp);
            }
    
            /// <summary>
            /// 将用户添加到部门和岗位
            /// </summary>
            /// <param name="userno"></param>
            /// <param name="departmentname"></param>
            /// <param name="postname"></param>
            /// <param name="ismain"></param>
            public void CreateDepartmentPostToUser(string userno,string departmentname,
                string postname,bool ismain)
            {
                var user = irepositoryuser.GetByCondition(p => p.No == userno, p => true).SingleOrDefault();
                var department = irepositorydepartment.GetByCondition(p => p.Name == departmentname,
                    p => true).SingleOrDefault();
                var post = irepositorypost.GetByCondition(p => p.Name == postname, p => true).SingleOrDefault();
                udp.CreateDepartmentPostToUser(user, department, post,ismain);
            }
    
            /// <summary>
            /// 根据部门名获取UDP信息
            /// </summary>
            /// <param name="departmentname"></param>
            /// <returns></returns>
            public List<BAS_UDPSet> GetUdpByDepartment(string departmentname)
            {
                var department = irepositorydepartment.GetByCondition(
                    p => p.Name == departmentname, p => true).SingleOrDefault();
                return udp.GetUDPByDepartment(department);
            }
    
            /// <summary>
            /// 根据用户NO获取UDP信息
            /// </summary>
            /// <param name="userno"></param>
            /// <returns></returns>
            public List<BAS_UDPSet> GetUdpByUser(string userno)
            {
                var user = irepositoryuser.GetByCondition(p => p.No == userno, p => true).SingleOrDefault();
                return udp.GetUDPByUser(user);
            }
    
            /// <summary>
            /// 根据岗位名获取UDP信息
            /// </summary>
            /// <param name="postname"></param>
            /// <returns></returns>
            public List<BAS_UDPSet> GetUdpByPost(string postname)
            {
                var post =
                    irepositorypost.GetByCondition(p => p.Name == postname, p => true).SingleOrDefault();
                return udp.GetUDPByPost(post);
            }
        }
    
    
    

    岗位BAS_PostService服务:

     public class BAS_PostService
        {
            private IRepository<BAS_Post> irepositorypost;
            private IRepository<BAS_IdentityContianer> irepositoryidentitycontianer;
            private IRepository<BAS_User> irepositoryuser;
            private IRepository<BAS_UDPSet> irepositoryudp;
    
            public BAS_PostService(IRepository<BAS_Post> irepositorypost
                ,IRepository<BAS_IdentityContianer> irepositoryidentitycontianer,
            IRepository<BAS_User> irepositoryuser,
            IRepository<BAS_UDPSet> irepositoryudp)
            {
                this.irepositorypost = irepositorypost;
                this.irepositoryidentitycontianer = irepositoryidentitycontianer;
                this.irepositoryuser = irepositoryuser;
                this.irepositoryudp = irepositoryudp;
            }
    
            /// <summary>
            /// 创建岗位
            /// </summary>
            /// <param name="name"></param>
            /// <param name="description"></param>
            public void CreatePost(string name,string description)
            {
                var bas_post = new BAS_Post(irepositorypost);
                var con_id = Guid.NewGuid();
                bas_post.CreatePost(name, description, con_id);
    
                var bas_identitycontainer = new BAS_IdentityContianer(irepositoryidentitycontianer);
                bas_identitycontainer.CreateIdentityContainer(con_id);
            }
    
            /// <summary>
            /// 通过用户NO获取用户岗位信息
            /// </summary>
            /// <param name="no"></param>
            /// <returns></returns>
            public List<BAS_Post> GetPostsByUserNO(string no)
            {
                var udps = new BAS_UDPService(irepositoryudp, irepositoryuser, null, irepositorypost)
                    .GetUdpByUser(no);
               
                var posts =new List<BAS_Post>(); 
                foreach(var udp in udps)
                {
                    var post = irepositorypost.GetByCondition(p => p.Id == udp.BAS_Post.Id, p => true)
                        .SingleOrDefault();
                    posts.Add(post);
                }
                return posts;
            }
        }
    

     BAS_DRService 角色

      public class BAS_DRService
        {
            private IRepository<BAS_Department> irepositorydepartment;
            private IRepository<BAS_Role> irepositoryrole;
            private IRepository<BAS_DR> irepositorydr;
            BAS_DR bas_dr;
    
            public BAS_DRService(IRepository<BAS_Department> irepositorydepartment,
            IRepository<BAS_Role> irepositoryrole,
            IRepository<BAS_DR> irepositorydr)
            {
                this.irepositorydepartment = irepositorydepartment;
                this.irepositoryrole = irepositoryrole;
                this.irepositorydr = irepositorydr;
    
                bas_dr = new BAS_DR(irepositorydr);
            }
    
            /// <summary>
            /// 将多个部门添加到角色中
            /// </summary>
            /// <param name="departmentnames"></param>
            /// <param name="rolename"></param>
            public void CreateBAS_DR(string [] departmentnames,string rolename)
            {
                var listdepartment = new List<BAS_Department>();
                for(int i=0;i<departmentnames.Length;i++)
                {
                    var department =
                        irepositorydepartment.GetByCondition(p => p.Name == departmentnames[i]
                        , p => true).SingleOrDefault();
                    listdepartment.Add(department);
                }
    
                var role = irepositoryrole.GetByCondition(p => p.Name == rolename, p => true).SingleOrDefault();
    
                bas_dr.CreateBAS_DR(listdepartment, role);
            }
    
           
            /// <summary>
            /// 根据部门名获取DR信息
            /// </summary>
            /// <param name="departmentname"></param>
            /// <returns></returns>
            public List<BAS_DR> GetDRSByDepartmentName(string departmentname)
            {
                var department =
                    irepositorydepartment.GetByCondition(p => p.Name == departmentname, p => true)
                    .SingleOrDefault();
                return bas_dr.GetDRSByDepartment(department);
            }
    
            /// <summary>
            /// 根据角色名获取DR信息
            /// </summary>
            /// <param name="rolename"></param>
            /// <returns></returns>
            public List<BAS_DR> GetDRSbyRoleName(string rolename)
            {
                var role =
                    irepositoryrole.GetByCondition(p => p.Name == rolename, p => true).SingleOrDefault();
                return bas_dr.GetDRSByRole(role);
            }
    
          
        }
    

      多个用户添加到角色 BAS_URService:

    public class BAS_URService
        {
            private IRepository<BAS_User> irepositoryuser;
            private IRepository<BAS_Role> irepositoryrole;
            private IRepository<BAS_UR> irepositoryur;
            BAS_UR bas_ur;
            public BAS_URService(IRepository<BAS_User> irepositoryuser,
            IRepository<BAS_Role> irepositoryrole,
            IRepository<BAS_UR> irepositoryur)
            {
                this.irepositoryuser = irepositoryuser;
                this.irepositoryrole = irepositoryrole;
                this.irepositoryur = irepositoryur;
                bas_ur = new BAS_UR(irepositoryur);
            }
    
            /// <summary>
            /// 将多个用户添加到角色
            /// </summary>
            /// <param name="usernos"></param>
            /// <param name="rolename"></param>
            public void CreateBAS_UR(string[] usernos,string rolename)
            {
                var listuser = new List<BAS_User>();
                for(int i=0;i<usernos.Length;i++)
                {
                    var user = irepositoryuser.GetByCondition(p => p.No == usernos[i], p => true)
                        .SingleOrDefault();
                    listuser.Add(user);
                }
    
                var role = irepositoryrole.GetByCondition(p => p.Name == rolename, p => true).SingleOrDefault();
    
                bas_ur.CreateBAS_UR(listuser, role);
    
            }
    
         
    
            /// <summary>
            /// 根据用户No获取UR
            /// </summary>
            /// <param name="userno"></param>
            /// <returns></returns>
            public List<BAS_UR> GetURSByUserNo(string userno)
            {
                var user = irepositoryuser.GetByCondition(p => p.No == userno, p => true).SingleOrDefault();
                return bas_ur.GetURSByUser(user);
            }
    
    
          
            /// <summary>
            /// 根据角色名获取UR
            /// </summary>
            /// <param name="rolename"></param>
            /// <returns></returns>
            public List<BAS_UR> GetURsByRoleName(string rolename)
            {
                var role = irepositoryrole.GetByCondition(p => p.Name == rolename, p => true)
                    .SingleOrDefault();
                return bas_ur.GetURSByRole(role);
            }
    
          
        }
    
    
    
    
  • 相关阅读:
    mysql---面试题2
    Mysql--存储过程
    MySql--锁机制
    MYsql事务
    IDEA创建新项目保存pom文件时,出现错误Cannot resolve org.openjfx:javafx.base:11.0.0-SNAPSHOP
    线程中的多线程、并行和并发、同步和异步、阻塞和非阻塞、线程安全
    Java里的Arrays.asList()返回的List不能使用add、remove方法?
    服务器可用的Socket
    MessageBox.Show
    NPOI 教程
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/7862690.html
Copyright © 2011-2022 走看看