权限分为:数据权限和功能权限
数据权限:
查询提供附加表达式的支持:
//提供附加表达式的支持
List GetByCondition(Expression> condition,
Expression> definecondition);
//返回聚合根分页的方法
List GetByConditionPages(Expression> condition,
Expression> definecondition,
RequestPage request, out int totalcount);
List GetByConditionPages(List condition,
Expression> definecondition,
RequestPage request, out int totalcount);
List GetByCondition(Expression> condition,
Expression> definecondition);
List GetByConditionPages(Expression> condition,
Expression> definecondition,
RequestPage request, out int totalcount);
List GetByConditionPages(List condition,
Expression> definecondition,
RequestPage request, out int totalcount);
不需要查询条件的写法:
var query = orderdbcontext.Set().Where(condition.And(definecondition));
在工程DDD.Domain新建文件夹ModelPermission: BAS_Department类
public partial class BAS_Department:AggreateRoot
{
private IRepository irepository;
public BAS_Department(IRepository irepository)
{
this.irepository = irepository;
}
///
/// 创建部门对象
///
///
///
///
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);
}
///
/// 根据部门名称返回部门对象
///
///
///
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 irepository;
public BAS_DR(IRepository irepository)
{
this.irepository = irepository;
}
public BAS_DR() { }
///
/// 创建DR对象,将多个部门添加到角色中
///
///
///
public void CreateBAS_DR(List 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);
}
}
///
/// 根据部门对象获取对应的DR信息
///
///
///
public List GetDRSByDepartment(BAS_Department department)
{
return irepository.GetByCondition(p => p.BAS_Department.Id == department.Id,p=>true);
}
///
/// 根据角色对象获取对应的DR信息
///
///
///
public List 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 irepository;
public BAS_IdentityContianer(IRepository irepository)
{
this.irepository = irepository;
}
///
/// 创建标识容器对象
///
///
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 irepository;
public BAS_Post(IRepository irepository)
{
this.irepository = irepository;
}
///
/// 创建岗位对象
///
///
///
///
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);
}
///
/// 根据岗位名返回岗位对象
///
///
///
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 irepository;
public BAS_PR(IRepository irepository)
{
this.irepository = irepository;
}
public BAS_PR() { }
///
/// 创建PR对象,将多个岗位添加到角色中
///
///
///
public void CreateBAS_PR(List 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);
}
}
///
/// 根据岗位对象获取PR信息
///
///
///
public List GetPRSByPost(BAS_Post post)
{
return irepository.GetByCondition(p => p.BAS_Post.Id == post.Id, p => true);
}
///
/// 根据角色对象获取PR信息
///
///
///
public List 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 irepository;
public BAS_Role(IRepository irepository)
{
this.irepository = irepository;
}
///
/// 创建角色对象
///
///
///
///
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);
}
///
/// 根据角色名返回角色对象
///
///
///
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 irepository;
public BAS_UDPSet(IRepository irepository)
{
this.irepository = irepository;
}
public BAS_UDPSet() { }
///
/// 创建UDP对象,将用户添加到某个部门某个岗位
///
///
///
///
/// 是否为主部门主岗位
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);
}
///
/// 根据部门获取对应的UDP信息
///
///
///
public List GetUDPByDepartment(BAS_Department department)
{
return irepository.GetByCondition(p => p.BAS_Department.Id == department.Id,
p => true);
}
///
/// 根据用户获取对应的UDP信息
///
///
///
public List GetUDPByUser(BAS_User user)
{
return irepository.GetByCondition(p => p.BAS_User.Id == user.Id, p => true);
}
///
/// 根据岗位获取对应的UDP信息
///
///
///
public List 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 irepository;
public BAS_UR(IRepository irepository)
{
this.irepository = irepository;
}
public BAS_UR() { }
///
/// 创建UR对象,将多个用户添加到角色中
///
///
///
public void CreateBAS_UR(List 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);
}
}
///
/// 根据用户对象获取对应的UR信息
///
///
///
public List GetURSByUser(BAS_User user)
{
return irepository.GetByCondition(p => p.BAS_User.Id == user.Id, p => true);
}
public List 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 irepository;
public BAS_User(IRepository irepository)
{
this.irepository = irepository;
}
///
/// 在仓储中创建用户对象
///
///
///
///
///
///
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);
}
///
/// 根据用户NO返回用户对象
///
///
///
public BAS_User GetUserByNo(string no)
{
return irepository.GetByCondition(p => p.No == no, p => true).SingleOrDefault();
}
///
/// 用户登录验证
///
///
///
///
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 irepositorydepartment;
private IRepository irepositoryidentitycontainer;
private IRepository irepositoryudp;
private IRepository irepositoryuser;
public BAS_DepartmentService(IRepository irepositorydepartment,
IRepository irepositoryidentitycontainer,
IRepository irepositoryudp,
IRepository irepositoryuser)
{
this.irepositorydepartment = irepositorydepartment;
this.irepositoryidentitycontainer = irepositoryidentitycontainer;
this.irepositoryudp = irepositoryudp;
this.irepositoryuser = irepositoryuser;
}
///
/// 协调创建部门与标识容器对象
///
///
///
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 GetDepartmentByUserNo(string no)
{
var udps = new BAS_UDPService(irepositoryudp, irepositoryuser,
irepositorydepartment, null).GetUdpByUser(no);
var departments = new List();
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 irepositoryudp;
private IRepository irepositoryuser;
private IRepository irepositorydepartment;
private IRepository irepositorypost;
BAS_UDPSet udp;
public BAS_UDPService( IRepository irepositoryudp,
IRepository irepositoryuser,
IRepository irepositorydepartment,
IRepository irepositorypost)
{
this.irepositoryudp = irepositoryudp;
this.irepositoryuser = irepositoryuser;
this.irepositorydepartment = irepositorydepartment;
this.irepositorypost = irepositorypost;
udp = new BAS_UDPSet(irepositoryudp);
}
///
/// 将用户添加到部门和岗位
///
///
///
///
///
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);
}
///
/// 根据部门名获取UDP信息
///
///
///
public List GetUdpByDepartment(string departmentname)
{
var department = irepositorydepartment.GetByCondition(
p => p.Name == departmentname, p => true).SingleOrDefault();
return udp.GetUDPByDepartment(department);
}
///
/// 根据用户NO获取UDP信息
///
///
///
public List GetUdpByUser(string userno)
{
var user = irepositoryuser.GetByCondition(p => p.No == userno, p => true).SingleOrDefault();
return udp.GetUDPByUser(user);
}
///
/// 根据岗位名获取UDP信息
///
///
///
public List 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 irepositorypost;
private IRepository irepositoryidentitycontianer;
private IRepository irepositoryuser;
private IRepository irepositoryudp;
public BAS_PostService(IRepository irepositorypost
,IRepository irepositoryidentitycontianer,
IRepository irepositoryuser,
IRepository irepositoryudp)
{
this.irepositorypost = irepositorypost;
this.irepositoryidentitycontianer = irepositoryidentitycontianer;
this.irepositoryuser = irepositoryuser;
this.irepositoryudp = irepositoryudp;
}
///
/// 创建岗位
///
///
///
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);
}
///
/// 通过用户NO获取用户岗位信息
///
///
///
public List GetPostsByUserNO(string no)
{
var udps = new BAS_UDPService(irepositoryudp, irepositoryuser, null, irepositorypost)
.GetUdpByUser(no);
var posts =new List();
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 irepositorydepartment;
private IRepository irepositoryrole;
private IRepository irepositorydr;
BAS_DR bas_dr;
public BAS_DRService(IRepository irepositorydepartment,
IRepository irepositoryrole,
IRepository irepositorydr)
{
this.irepositorydepartment = irepositorydepartment;
this.irepositoryrole = irepositoryrole;
this.irepositorydr = irepositorydr;
bas_dr = new BAS_DR(irepositorydr);
}
///
/// 将多个部门添加到角色中
///
///
///
public void CreateBAS_DR(string [] departmentnames,string rolename)
{
var listdepartment = new List();
for(int i=0;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);
}
///
/// 根据部门名获取DR信息
///
///
///
public List GetDRSByDepartmentName(string departmentname)
{
var department =
irepositorydepartment.GetByCondition(p => p.Name == departmentname, p => true)
.SingleOrDefault();
return bas_dr.GetDRSByDepartment(department);
}
///
/// 根据角色名获取DR信息
///
///
///
public List 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 irepositoryuser;
private IRepository irepositoryrole;
private IRepository irepositoryur;
BAS_UR bas_ur;
public BAS_URService(IRepository irepositoryuser,
IRepository irepositoryrole,
IRepository irepositoryur)
{
this.irepositoryuser = irepositoryuser;
this.irepositoryrole = irepositoryrole;
this.irepositoryur = irepositoryur;
bas_ur = new BAS_UR(irepositoryur);
}
///
/// 将多个用户添加到角色
///
///
///
public void CreateBAS_UR(string[] usernos,string rolename)
{
var listuser = new List();
for(int i=0;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);
}
///
/// 根据用户No获取UR
///
///
///
public List GetURSByUserNo(string userno)
{
var user = irepositoryuser.GetByCondition(p => p.No == userno, p => true).SingleOrDefault();
return bas_ur.GetURSByUser(user);
}
///
/// 根据角色名获取UR
///
///
///
public List GetURsByRoleName(string rolename)
{
var role = irepositoryrole.GetByCondition(p => p.Name == rolename, p => true)
.SingleOrDefault();
return bas_ur.GetURSByRole(role);
}
}