本文初衷
之前在学习DDD的时候,一直被权限与角色困扰。
我们知道在Asp.net MVC 的Controller或Action加上特性标签[Authorize],就可以实现权限控制。
[Authorize(Roles ="Manager")]public classMainController : Controller
{//GET: Main
publicActionResult Index()
{returnView();
}
}
但是在应用层中,如何使用好角色?在领域层如何设计好角色?如何使角色系统变得更优雅,更易扩展?
上述问题将是本位探讨的内容。
问题引入
我们模拟开发一个简单的公司内部审批系统,有以下两种角色:
1.经理:审批申请单。
2.员工:提出请假申请单。
设计如下:
角色接口:
public interfaceIRole
{}
a.经理接口:
public interfaceIManager : IRole
{///
///批准申请单///
///
voidApprovalOrder(ApplyOrder applyOrder);
}
b.员工接口:
///
///员工接口///
public interfaceIEmployee : IRole
{///
///提交申请///
///
///
ApplyOrder ApplyNewOrder(stringcontent);
}
c.用户类:
public classUser
{publicUser()
{
Roles= new List();
}public string Id { get; set; }///
///名字///
public string Name { get; set; }///
///用户的角色字符串///
public List