对于这样的系统一种常见的处理方式是固化,就是按等级给定权限,比如部门经理拥有所有项目的CRUD权限,项目经理只对自己的项目有CRUD权限,一般成员只有R权限,这样的设计不能完全反映现实的关系。只能用于非常僵化的场合。
实际上,项目,成员的关系类似于房间的门和人的关系,载它们之间加上钥匙一切都迎刃而解。
钥匙定义如下
class Key{
int projectId;// 项目的唯一ID
boolean create;
boolean read;
boolean update;
boolean delete;
}
钥匙串定义如下:
class KeyBunch{
Map buch;// 里面放的钥匙的hashMap
boolean isCanAccess(Project project){
.....
}
}
然后把钥匙串作为Member类的一个子项就可以了,其它函数可以根据情况书写.
这样,有了Key类和KeyBunch类,Project类和Member类的权限关系就变得合乎自然了,Project类和Member类也不会产生耦合.老子曰"人法地,地法天,天法道,道发自然",真是一语中的.
