求用户权限委托的设计方案

现做一个产品,其中有一个权限委托的功能需要实现。

假设两个部门的两个用户
department1 user1
department2 user2
user1具有修改用户的权限,但只局限于本部门(department1)内的用户。
user2没有任何权限。
现在user1把自己的修改用户(本部门)这个权限委托给user2。

要求实现的效果:
1.user2也是只能修改department1内的用户。
2.程序代码实现上,要非常的方便。例如,如果user2也同样具有修改本部内(department2)的用户的权限,那么在代码实现上必须很容易的区分这两种权限,一个委托的,一个自己拥有的,而且要做到统一处理。

我的建议是加入 角色role,
role1: 具有修改用户的权限
role2:没有任何权限。

再将user1和user2分布和role1和role2建立联系即可。

首先谢谢banq大哥,过了一年,总算有人回复了。

但是我的要求是user1只能修改本部门的用户
如果user1把role1委托给user2,正确的结果应该是user2也只能修改user1所在部门的用户,而不能修改user2自己所在部门的用户。

如果按照你的思路,怎样控制user2不能修改自己所在部门的用户呢?因为user2已经接受了user1的role1委托,而role1就具有修改用户的权限,所以user2就具有了修改用户的权限了,也就可以修改自己所在部门的用户了。

权限控制
1.结构说明:
A:000 A1:000,001,002
B:000000
C:000001
D:000002

B.a 000000000
B.b 000000001
B.c 000000002
假如A是群组的本身No_rank,A1是该群组的No_childRank,从这里可以看出B,C,D是A的孩子。孩子的权限No_rank是由父No_rank+NO_childrank。按照这个思路,有000权限的用户将会拥有对以000开头的所有用户和群组的权限。同理B的孩子的权限No_rank的前六位一定是000000。采用此结构的原因是还是为了方便写程序,这样在每步危险操作之前只要比较一下当前用户和操作对象的权限即可。

这样就是父亲永远有孩子的所有权限,但是孩子只能有父亲的部分权限。

A可以代表一个部门
B,C,D就是该部门的成员
拥有A(000)权限的人就可以有对以000开头的所有用户或部门的操作权

这样如果要进行权限分配。用户只能分配出自己以后的权限
如:A:000用户可以在部门dep:000...里进行新建用户,而新建的用户也是以000开头.
具体设计的时候应该还要考虑一些细节问题。