方法一:
用户表:
T_UserInfo
id
name
对象表:
T_Object
id
name
权限表
T_Access
accessid
userid(外键,来自用户表)
objectid(外键,来自对象表)
access(用代码记录用户的权限组合:
1000 浏览
1100 浏览、添加
1110 浏览、添加、编辑
1111 浏览、添加、编辑、删除
等)
方法二:
用户表:
T_UserInfo
id
name
对象表:
T_Object
id
name
access1(代表浏览,保存用户的id号,用逗号分隔)
access2(代表浏览、添加)
access3(代表浏览、添加、编辑)
access4(代表浏览、添加、编辑、删除)
孰优孰劣?
---------------------------------------------------------------
我們用的是第一種
WINDOWS系統用的也是第一種
---------------------------------------------------------------
方法2不可取,用户增加的时候非常麻烦,而且access1--access4的长度很难确定。
---------------------------------------------------------------
of course 第一种
---------------------------------------------------------------
要是我肯定選第一種
---------------------------------------------------------------
赞同方法一,
再改进一下
AccessType
id,typeTitle
1,浏览
2,添加
3,编辑
4,删除
5.....
权限表
T_Access
accessid
userid(外键,来自用户表)
objectid(外键,来自对象表)
accessTypeID
---------------------------------------------------------------
同意第一种,减少了冗余。
---------------------------------------------------------------
方法1
---------------------------------------------------------------
CrazyFor的意见是很好的
其实我想大部分系统都是如此处理的,
至少我的就是,不过操作类型AccessType定义成2个层次,元操作和操作组合(用户可以自定义)
---------------------------------------------------------------
赞同第一种做法
---------------------------------------------------------------
用第一种;
你可以把用户分组啊!
给每个组一定的权限,不过可以更改!
---------------------------------------------------------------
对于小型系统,实际上第二种办法比第一种办法好,操作更方便,检取更方便。
中型系统,第一种比第二种好,可以考虑CrazyFor(蚂蚁)的方案。
但均不完整。
事实上两种方案都有较大缺陷。
有三种可能:小型系统、中型系统、大型系统
如果是大型系统,请看一下下面的模型:
对象表:
ObjID (PK)
ObjName
对象粒度表:
ItemID (PK)
ObjID (FK)
ItemType(单选/多选/输入)
DataString("select * from sex"/"增 ¦删 ¦改 ¦查")
DataSource("dbname=...;user=...;pwd=...")
...
用户表:
UserID (PK)
UserName
角色表:
RoleID (PK)
Rolename
用户角色表:
URID (PK)
UserID (FK)
RoleID (FK)
用户权限表:
UIID (PK)
UserID (FK)
ItemID (FK)
Value
角色权限表
RIID (PK)
RoleID (FK)
ItemID (FK)
Value
以上方案将是一个终极解决方案。
另外:
1、不使对象表,只使用粒度表:中型系统
2、1之外,不使用角色相关的表:小型系统
---------------------------------------------------------------
不太喜欢,为什么不结合利用数据库本身的一套安全权限管理机制呢
---------------------------------------------------------------
考虑到长远的情况,我赞同给用户分组(即角色),给角色分配权限,用户只是属于不同的角色,这样在用户数和对象数很多的情况下,权限表也不至于很大,我就是这样实现的.
---------------------------------------------------------------
好问题啊,收藏!