你是设计之前最好写你的思路,你之所以出现这种情况是因为你做之前没有思考完整,而是边做边想的那种,做到那里就想到那里,所以会在这种情况时出现思绪乱的情况,以后得采用软件工程式的方式工作呀,楼主!其实我觉得你的这个设计可以这样进行:
用户表--iD,用户类型,权限标志,用户名
权限表--ID,是否可读,下载,回复,编辑,增加,删除权限标志对应权限表的id
用户表--iD,用户类型,权限标志,用户名
权限表--ID,是否可读,下载,回复,编辑,增加,删除权限标志对应权限表的id
调试欢乐多
假设是否可读、下载、回复、编辑、添加、删除分别用以下来标志
1 2 4 8 16 32
普通用户 有 1, 2,4三个权限标志。如果该用户有可读,可回复,不能下载,则为1+4=5
权限位为5假设文章是一个分类,ID为3,普通用户的角色ID为1,权限为可读,可回复,不能下载则
建立权限表类似如下
分类ID 角色ID 权限ID
3 1 5用户表中有一个字段来保存他的角色ID登录后根据他的角色ID到权限表中读出该角色所应有的权限,保存在SESSION中
判断用户是否有该权限
define("READ",1);
define("DOWNLOAD",2);
define("REPLY",4)
if ($_SESSION['permission'] & READ)
echo "有权限";
else
echo "没有读的权限
$power = array('view','read','reply','edit');
数据库中权限字段
$powerStr = “1,0,1,1”
$tmp = explode(',',$powerStr);
foreach($power as $id=>$key)
$user['power'][$key] = $tmp[$i];
我感觉52juanjuan(Fibona)的是一种思路,但是我又想到ice_berg16(寻梦的稻草人)那样的设计,就是说,用户有自己的权限字段,但是又有一张权限表对应字段,这是不是重复了?或者说他们有什么关系?
至于 hahawen(变态的大龄青年),你的方法,是只在用户表上设计权限字段?我也比较喜欢将权限设置为0和1,但是这样并不能和组别,权限表,目标对应起来~~
id ParentID Content RightsCode
1 0 a 1
2 0 b 2
3 1 aa 3
4 1 ab 4
5 2 ba 5权限列表(可读101、下载102、回复103、编辑104、添加105、删除106):RightsList
id RightsList Name
1 101 可读
2 102 下载
3 103 回复
4 104 编辑
5 105 添加
6 106 删除用户列表:UserList
id UserID Username
1 wf 王菲
2 dh 大海用户权限列表:UserRightsList
id Userid CategoryID UserRightsList
1 wf 5 101 102 103
2 wf 4 101 104 106
---------------------------------------------
3 wf 1 105当点击具体目录时,通过UserRightsList表读取当前用户在本目录下的权限,
如果此用户在大版块下有权限 如第3条,那么可以把此权限继承到小版块中,
那么wf在Category 5小版块下的权限就是101 102 103 105个人的想法,肯定不是很成熟,望指教!!!!!!!!!!!!!!!!!:)
http://feyge.l79.isdns.com/feyge/article/item_php/1024023122.htm
栏目ID 组ID 操作
栏目1 组1 ...
栏目1 组2 ...
栏目1 组3 ...
栏目2 组1 ...
栏目3 组1 ...
只对于特定的版
栏目ID 组ID 操作
栏目1 会员 阅读
栏目1 版主 阅读&编辑
栏目2 会员 阅读&发表
栏目2 版主 阅读&发表&编辑是不是每个版主都要对相应的栏目进行设置权限?每一个会员X每一个栏目,那就是 n*m 种可能的分配的.
目的:
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表里可以设置。到了具体的版块,还可以设置针对某一个组的特殊权限。如上,普通用户组在程序设计版块只是有了看帖权,发帖权被屏蔽掉了。而在电影下载版块,他既有看帖权又有发帖权.如上所示,我们实际上可以为我们的系统加上更多的功能,如聊天,交友,这些功能用一个表是不能完成的。我们可以为其指定属于自己的权限对应表。实际上用户组这个表中的权限可以看作是这些权限对应表中的权限字段的和,只是用户组提供了一个默认值。如上的办法虽然可以处理很复杂的权限关联,但是扩展性不是太好,如果要为某一栏目加上一个权限字段,那对应的用户组表里也得加上这个字段,这大概是其最大的局限性。并且在权限判断时得要判断两次,一次是用户是否有对应的基本权限,第二次是要判断用户在指定的版块里是否有权限。这些是此法的局限性:)个人意见,仅供参考。
目前觉得他的思路最好了.
用户组的概念没有用到。偶然老兄的确实不错,嘿嘿,理理思路
你可以这样做嘛,给用户组也分配权限(即权限列表RightsList中的权限),它和分配给用户的权限是一样的,然后再把用户添加到组中去。在页面中取得用户的权限,其实就是取得这个用户所在组的权限和这个用户的独立权限的“并集”!x个用户,y个分类的话,理论上就要有x*y行数据。------你说的没错,所以才把用户和权限的对应关系单独做成一个表UserRightsList,难道在数据表中的查询还不算是快的吗?当然如果有更好的解决办法,我也愿意洗耳恭听,呵呵至于表UserRightsList中的UserRightsList字段,你也可以做成100110这样的格式,每一个位代表一个权限,然后利用位运算读取权限。。但在ASP中似乎没有位运算(我没找到相关资料),所以我基本上用的都是三位或四位数字来代表一个权限!我说的方法绝对是可行的,因为我就反复用过很多次,但有些细微之处可能需要改进我还没找到更好的方法!:)
表中的字段为:
可读
下载
回复
编辑
添加
删除往里面添加的数据,一条记录就是一个用户组。
比如:
先插入一条普通用户组的权限数据 INSERT INTO tablename VALUES('true','false','true','false','true','false')。
插入管理员组的权限: INSERT INTO tablename VALUES ('true','true','true','true','true','true')这样只要调用就可以了,以后增加字段就增加了权限,改起来方便,维护更方便