 |
上一主题
最近在看Access, 说起原因来很搞笑. 俺老哥对电脑一知半解, 用Excel怕写VBA, 学foxpro也没编出象样的应用程序来. 但是他一直想把他用excel管理的账目用B/S结构放到网上, 这..
|
|
下一主题
Note:
首先,向版主致歉。这原是关于权限系统设计问题的回帖,本不应该另开新贴。而在下的另开新贴,一方面是因为本人的观点中与很多人的观点差别较大,另一方面也担心其会被“埋没”在原贴的大量回帖中。此..
|
|
|
|
|
|
|
|
关于“用户权限控制”大讨论的读后感与自己的一点想法。
|
2003年08月24日 23:09
|
|
|
标签列表
|
|
首先向斑竹致歉,为了引起大家的关注,新开了个帖子:-) 在权限系统中,user不用详细描述了,基本是通用的, role可以理解为是岗位,举个软件公司的例子,开发部经理和软件部经理的role是一样的,role直观上理解是职权的意思,可以把role做成一颗树,表达一种职权领导关系,即父role直接领导子role,所以上面的例子,总经理这个role应该是root,role与user是多对多的关系。(一个人可以身兼数职)。 group可以理解为是组织机构,还是上面的例子,软件公司下面有开发部和工程部,可以把group做成一颗树,表达一种组织机构隶属关系,group与user也是多对多的关系(符合国情:-)....) role与group的引入只是说明user与user之间的两种系统中最常见的关系。 一个复杂的权限控制可能是很一个复杂的策略,不能通过单单对角色或者group的授权来完成,应该是一个if..else..的过程,输入参数有which(实例)的id和ower_user_id(which的creator),当前的用户id,返回结果是boolean,决定who(当前的用户)对当前的which是否有how的权限。在策略执行的过程当中,会根据输入参数以及上面提到的人和人之间的最基本的关系:role和group来进行一系列的判断,当然在策略执行过程当中还会设计到业务逻辑方面的信息,比如针对某一个what的数据(what是一类数据,如订单的所有数据),可能会根据某一些条件,在策略执行过程中分别选择不同的流程分支,如2000前的订单数据和之后的数据有着不同的权限控制策略,需要在策略执行过程当中进行分支处理,这样其实也就解决了when(工作流)的问题,因为when的区分最终都会体现在which的具体数据中的,比如领导签字前和领导签字后的数据。 实施: 用关系数据库表达如下: groups:groupid pargroupid groupname roles:roleid superroleid rolename users: userid username group_user : groupid userid role_user : roleid userid 在what的角度定义策略执行脚本,拿order为例子: if (order.ordertime > 2000.09.08) { if (owner_user_id.groupid == 3) { ..... return true; } else { ..... return false; } } else { ..... return false; } 存在的问题:没有java好像没有发现有类似delphi中的dreamer script editor这样强大的控件:-) 以上只是个人想法,欢迎大家交流和批评指正。
|
|
|
|
热点TAG:
AOP
cache
缓存
DDD
EJB
集群
设计模式
Hibernate
IOC
JiveJdon
OO
RBAC
Seam
Spring
Struts
anti spam
|