关于“用户权限控制”大讨论的读后感与自己的一点想法。

03-08-24 hainiao1979
首先向斑竹致歉,为了引起大家的关注,新开了个帖子:-)

在权限系统中,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这样强大的控件:-)

以上只是个人想法,欢迎大家交流和批评指正。

1
猜你喜欢