权限,脑子乱了~~

countstars 2004-04-07 11:27:24
对于分类,假设有几个个权限:
分类ID、是否可读、下载、回复、编辑、添加、删除
用户组:
1.普通用户--是否允许可读、可下载、可回复
2.编辑 --是否允许编辑、添加、删除
3.管理员 --不论分类设置和权限组设置如何,均可(不知道是不是这样)
权限表:
分类ID,是否可读、下载、回复、编辑、添加、删除

现在这里面乱了,数据表到底该怎么设计?哪个对应哪个?怎么感觉有些重复了,有时候又感觉不够严密,矛盾

不知道该怎么设计这种对应关系。。。请指点,多谢。乱了~~
...全文
74 点赞 收藏 29
写回复
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanzhen 2004-04-17
呵呵,我这个就是按组来划分权限,用户表中留个ID以便确认他属于那个组,我这个只是修改组的权限,不改单个用户的权限。

如果按照模块来分权限,那就把组的概念换成模块组,一个模块组里的字段以模块名称命名。数据如上面一样。如果需要更复杂些,把模块分组,不过这些都存在一张表里。用户表中存的仍是与权限表相关的ID。

你要让用户组调哪个模块,就把那个组对应到权限表中的模块的值设为true,否则false。
回复
countstars 2004-04-17
你没考虑到用户属于组,但是用户在不同的模块可能有不同的权限(位于不同组)
回复
wanzhen 2004-04-17
我觉得把所有要实现得权限组都放入一个权限表里。
表中的字段为:
可读
下载
回复
编辑
添加
删除

往里面添加的数据,一条记录就是一个用户组。
比如:
先插入一条普通用户组的权限数据 INSERT INTO tablename VALUES('true','false','true','false','true','false')。
插入管理员组的权限: INSERT INTO tablename VALUES ('true','true','true','true','true','true')

这样只要调用就可以了,以后增加字段就增加了权限,改起来方便,维护更方便
回复
wubai250 2004-04-13
建义

采用

win2k的共想权限试一试!
回复
cullstar 2004-04-13
countstars(深空)

其实你说的“用户组”就是我指的“角色”,用户组只不过是一个容器,和用户及用户权限没有直接的关系!
你可以这样做嘛,给用户组也分配权限(即权限列表RightsList中的权限),它和分配给用户的权限是一样的,然后再把用户添加到组中去。在页面中取得用户的权限,其实就是取得这个用户所在组的权限和这个用户的独立权限的“并集”!

x个用户,y个分类的话,理论上就要有x*y行数据。------你说的没错,所以才把用户和权限的对应关系单独做成一个表UserRightsList,难道在数据表中的查询还不算是快的吗?当然如果有更好的解决办法,我也愿意洗耳恭听,呵呵

至于表UserRightsList中的UserRightsList字段,你也可以做成100110这样的格式,每一个位代表一个权限,然后利用位运算读取权限。。但在ASP中似乎没有位运算(我没找到相关资料),所以我基本上用的都是三位或四位数字来代表一个权限!

我说的方法绝对是可行的,因为我就反复用过很多次,但有些细微之处可能需要改进我还没找到更好的方法!:)

回复
xuzuning 2004-04-12
必须的冗余还是要的
栏目ID 组ID 操作
栏目1 组1 ...
栏目1 组2 ...
栏目1 组3 ...
栏目2 组1 ...
栏目3 组1 ...
回复
countstars 2004-04-12
请问唠叨:
描述该栏目、版面可由谁做何种操作
这个谁该怎么设置?对组还是对用户?如果是组,以字段表示:
栏目ID 组1 组2 组3
每添加一个组,就得修改一次数据表。
如果是组的成员,那么如果成员过多(比如很多会员),那么又该如何?

所以请问这个“由谁做何种操作”的谁怎么样定义?谢谢
回复
xuzuning 2004-04-12
关系到两种权限
1、栏目、版面的权限,描述该栏目、版面可由谁做何种操作
2、用户、组的权限,用户的权限由组派生,可修改但不可超越所在组的权限

两组相交即可得到当前用户在当前版面的权限
回复
countstars 2004-04-12
而且是多个分类,没有人作过完整的权限分配么?思路也行
回复
syp8065 2004-04-12
可是还要求单个用户做设置。
回复
qm0445 2004-04-12
用组,组对应权限!用户对应组!就好了!
回复
countstars 2004-04-12
重新看了下 cullstar(我踏月色而来╰☆╮) 的权限分配,清晰多了,只是这样好像不适用于多个分类,x个用户,y个分类的话,理论上就要有x*y行数据。
用户组的概念没有用到。偶然老兄的确实不错,嘿嘿,理理思路
回复
skystar008 2004-04-12
cullstar(我踏月色而来╰☆╮)
目前觉得他的思路最好了.
回复
skystar008 2004-04-12
这样分要写死人了.哈哈哈.
回复
ustb 2004-04-12
郁闷,掉了一个字,“如果栏目不是很多,可以用一个字段来记录,然后用分隔符隔开,但这样是[不]规范的”.
回复
ustb 2004-04-12
这里面的问题也不是太复杂,用论坛的例子来简单的分析如下:
目的:
1.不同的用户拥有不同的权限,
2.在不同的栏目里允许不同的用户进入.

实现:
1.将用户分组,组里设置最基本的权限.当然可以默认指定一些权限.比如用户组可以看帖,回帖等.
2.如果栏目不是很多,可以用一个字段来记录,然后用分隔符隔开,但这样是规范的.如果想要得到更好的结构,那应当建立一个对应表,来记录下栏目允许的用户组.

表结构:
用户组表
+----------+----------+-----------+-----------+
ID 组名 权限名1 权限名2 ……
+----------+----------+-----------+-----------+
groupid groupname allow_view allow_post ……
+----------+----------+-----------+-----------+
1 普通用户 1 1 ……
+----------+----------+-----------+-----------+
……

论坛权限表
+----------+----------+-----------+-----------+-----------+
版块ID 用户组ID 版块名 权限名1 权限名2 ……
+----------+----------+-----------+-----------+-----------+
blockid groupid blockname allow_view allow_post ……
+----------+----------+-----------+-----------+-----------+
2 1 程序设计 1 0 ……
+----------+----------+-----------+-----------+-----------+
2 1 电影下载 1 1 ……
+----------+----------+-----------+-----------+-----------+

……

如上表所示,普通用户组本身是拥有看帖权和发帖权的,这在group表里可以设置。到了具体的版块,还可以设置针对某一个组的特殊权限。如上,普通用户组在程序设计版块只是有了看帖权,发帖权被屏蔽掉了。而在电影下载版块,他既有看帖权又有发帖权.

如上所示,我们实际上可以为我们的系统加上更多的功能,如聊天,交友,这些功能用一个表是不能完成的。我们可以为其指定属于自己的权限对应表。实际上用户组这个表中的权限可以看作是这些权限对应表中的权限字段的和,只是用户组提供了一个默认值。

如上的办法虽然可以处理很复杂的权限关联,但是扩展性不是太好,如果要为某一栏目加上一个权限字段,那对应的用户组表里也得加上这个字段,这大概是其最大的局限性。并且在权限判断时得要判断两次,一次是用户是否有对应的基本权限,第二次是要判断用户在指定的版块里是否有权限。这些是此法的局限性:)

个人意见,仅供参考。
回复
ccterran 2004-04-12
还真有点麻烦,可不可反过来呢?每个栏目的
不能阅读 编辑 发表
1,2 2,3,5 1,7

就是栏目再加三个字段,记录拥有此权限的斑竹id
回复
countstars 2004-04-12
恩,但是,如果比如是版主
只对于特定的版
栏目ID 组ID 操作
栏目1 会员 阅读
栏目1 版主 阅读&编辑
栏目2 会员 阅读&发表
栏目2 版主 阅读&发表&编辑

是不是每个版主都要对相应的栏目进行设置权限?每一个会员X每一个栏目,那就是 n*m 种可能的分配的.
回复
IvanQi 2004-04-11
gz
回复
countstars 2004-04-11
Up,有没有对此有研究的朋友出来说说多分类权限设计?看了下 Windows 的,要使添加一个组,就得在这个类表上增加一个字段,比较麻烦,对于 MySQL 还好, 对于其他数据库来说就有局限性了
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告