Posted on 2007-06-11 10:55
博学精思慎言笃行 阅读(1047)
评论(6) 编辑 收藏 所属分类:
Object Orient Programming
权限是企业应用中常见限制关系,比如说有项目,成员两种类,成员对项目的权限不一,对不同项目还有不同权限,怎么设计这样的系统呢?
对于这样的系统一种常见的处理方式是固化,就是按等级给定权限,比如部门经理拥有所有项目的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由Project类生成,然后附加到Member类的KeyBunch中,其它函数可以根据情况书写.
这样,有了Key类和KeyBunch类,Project类和Member类的权限关系就变得合乎自然了,Project类和Member类也进一步解耦.
老子曰"人法地,地法天,天法道,道发自然",真是一语中的.
Feedback
# re: 关于权限系统的设计 回复 更多评论
2007-06-11 11:33 by
写的不错
# re: 关于权限系统的设计 回复 更多评论
2007-06-11 12:27 by
实际中的权限其实也不只有crud啊,比如可能还有打印\查询等等,我认为可以把Key再设计灵活一点
# re: 关于权限系统的设计 回复 更多评论
2007-06-11 12:39 by
这么设置用于控制没有问题,关键是你怎么分配,或者说授权时怎么组织同一个房间的不同角色的钥匙的分配和不同房间的钥匙的组合
# re: 关于权限系统的设计 回复 更多评论
2007-06-11 20:52 by
@chenzugang
你说的有道理,等考虑成熟我再补充.
# re: 关于权限系统的设计 回复 更多评论
2007-06-12 09:20 by
这样设置还不是以前的权限模型吗?如果有太多的key,比如说做权限分配要做多个权限的赋值(多个key),这样就会诞生 角色 (用一个角色来对应多个权限),从而达到简化付权限的操作。这样,就和其他的权限控制系统没区别了吧。顺便问一句,和老子的理论有什么关系?不太懂呀
# re: 关于权限系统的设计 回复 更多评论
2007-06-12 12:23 by
@wangsoft
这是是我观察日常生活的一点想法,所以说"道法自然",和老子沾了点边.如果说和已有的权限系统相似则说明大家都趋向"道法自然".
我心中的"道法自然"意思是与其冥思苦想程序架构,不如在现实生活中寻找相似的场景再归纳起来,形成符合自然的程序架构.
由于本人尚未将此想法完整的付诸实践,难免有不完善的地方,等应用此设想后再行更新此文.