看来我们大家意见已经趋同

Group 是 User 的集合.
Role 是 Privilege 的集合(应该是Privilege+resource的集合)

最后的分歧可能是我括号里那点说明。
不知iceant是不是也是我括号中的意思?



> 对于用户直接拥有权限,我还是不建议让用户直接与权限关联

那如何解决role过多的问题?


role不会过多,与你的设计是一对一的概念。

role可以usergroup对应起来。

role可以说是权限的集合,权限可以有很多,但role只有一个啊。

但是权限很多的话,不同权限的组合也会很多,这样就产生了role过多的问题,就像我第一个帖子说的。

那这取决于你的设计了。role过多是因为你的系统需求的权限过多。

是的,但是系统权限很多的情况还是不少。
在一些ERP项目里面,权限设置的很细,如果那样的话role真的太多。
提出user-->funtion似乎表面上可以解决这个问题。

虽然role很多,但是如果user-->funtion的话,funtion的组合更多啊。

user = usergroup ==> role = funtion privileg 的目的应该就是减少组合吧

funtion的组合是什么意思,不就是role吗。user-->funtion不存在组合过多的问题,它面向的是单个用户。

user -> privilege的话,可重用性太差了,如果privilege很多的话,管理起来就头痛了,得逐个user的从一大堆的privilege中找出几个直接赋予权限,很痛苦的,
还是用role比较好

对于role过多的问题,可以把role按类型进行分组简化管理,如:
DB
|--DBA
|--DBUser


嗯,这样解决也许是个比较好的方案

我目前的项目采用的简化方案是 User可以配置多个Role,Role是固定的,如果Role很多,可以设置Role组

rose 与 privilege 我想可以和到一起,
来绑定resource .

对一个ERP产品的认识(5)-------权限控制
我刚写的。:)

赫赫。偶早就作过这样的东东了

Directory of X:\works\u_vss\BASELIB\ACL2\SourceCode\com\beaconsystem\acl2

2002-10-11 17:11 921 ACLHomeFactory.java
2002-10-11 17:11 1,459 Department.java
2002-10-11 17:11 2,050 DepartmentHome.java
2002-10-11 17:11 1,701 Resource.java
2002-10-11 17:11 2,336 ResourceHome.java
2002-10-11 17:11 1,404 Role.java
2002-10-11 17:11 1,702 RoleHome.java
2002-10-11 17:11 5,909 User.java
2002-10-11 17:11 978 UserHome.java

Directory of X:\works\u_vss\BASELIB\ACL2\SourceCode\com\beaconsystem\acl2\datab
ase

2002-10-11 17:11 8,379 DbDepartment.java
2002-10-11 17:11 3,692 DbDepartmentHome.java
2002-10-30 20:47 12,135 DbResource.java
2002-10-19 16:05 6,063 DbResourceHome.java
2002-10-11 17:11 9,137 DbRole.java
2002-10-11 17:11 4,518 DbRoleHome.java
2002-10-11 17:11 3,532 DbRoleResourceProxy.java
2002-10-19 16:03 20,217 DbUser.java
2002-10-19 16:04 5,293 DbUserHome.java
2002-10-11 17:11 2,554 DbUserResourceProxy.java

分为User/Role/Department/Resource/ResourceOptions 几个层次。
Department:Role = {1:n}
user:Role ={n:n}
ResourceOptions:Role={n:n}
Resource:ResourceOptions={1:n}

除了自己写,还有一个Open source的程序可以用来做这个事情。好像叫做pow2ACL,大家可以参考。

真正的ACL模型,这样基于数据库是不行的,需要使用LDAP.早晚要走到LDAP这条路上去。