关于权限的数据库设计,两种方法,哪种更合理些,大家来说……

方法一:

用户表:
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之外,不使用角色相关的表:小型系统

---------------------------------------------------------------

不太喜欢,为什么不结合利用数据库本身的一套安全权限管理机制呢
---------------------------------------------------------------

考虑到长远的情况,我赞同给用户分组(即角色),给角色分配权限,用户只是属于不同的角色,这样在用户数和对象数很多的情况下,权限表也不至于很大,我就是这样实现的.

---------------------------------------------------------------

好问题啊,收藏!

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus