免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8075 | 回复: 55
打印 上一主题 下一主题

大家进来讨论多用户权限的解决问题吧! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-07 11:39 |只看该作者 |倒序浏览
大家进来讨论多用户权限的解决问题吧!

1\权限标记:游览2\录入3\修改5\删除7
把用户拥有的模块权限标记相乘,检查是,把积除以相应权限,如果余数为0,既有该权限,
如:用户拥有游览\录入\修改权限,即2x3x5=30,30%2=0含有游览权限;30%3=0含有录入权限;30%5=0含有修改权限;30%7<>0不拥有删除权限;

2\用户登录时先读取该用户全部与其对应的模块权限并写进session,当进入该模块操作时检查session,查有没有该权限

大家觉得这样如何?还是有别的更好的方法呢?

[ 本帖最后由 ljc_168 于 2006-4-7 14:39 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-04-07 15:00 |只看该作者
不要拘泥于单一的形式。再好的方法,如果你不熟悉,写代码的效率还不如用你熟悉的不太好的方法效率高。

我自己习惯用常数 1 3 5 7 这样的素数来表示

论坛徽章:
0
3 [报告]
发表于 2006-04-07 15:25 |只看该作者
原帖由 carset 于 2006-4-7 15:00 发表
不要拘泥于单一的形式。再好的方法,如果你不熟悉,写代码的效率还不如用你熟悉的不太好的方法效率高。

我自己习惯用常数 1 3 5 7 这样的素数来表示


那用1 3 5 7 是如何实现的?

论坛徽章:
0
4 [报告]
发表于 2006-04-07 15:32 |只看该作者
原帖由 ljc_168 于 2006-4-7 11:39 发表
大家进来讨论多用户权限的解决问题吧!

1\权限标记:游览2\录入3\修改5\删除7
把用户拥有的模块权限标记相乘,检查是,把积除以相应权限,如果余数为0,既有该权限,
如:用户拥有游览\录入\修改权限,即2x3x5=30,30% ...


我的权限方案是用字符串表示,每种操作都作为一个字符串关键词,用户(或者用户组)拥有的字符关键词越多,也就是权限越多。我这种权限与权限之间是平行的,而不是继承的关系。每个用户的权限可以任意组合。

论坛徽章:
0
5 [报告]
发表于 2006-04-07 15:48 |只看该作者
原帖由 ljc_168 于 2006-4-7 15:25 发表


那用1 3 5 7 是如何实现的?


常量咯。

比如 1 游客 3 普通用户 5 斑竹 7 管理员。

需要判断权限的时候就拿这个数字出来比较。所有的需要权限的页面。都有一个 checkPerm($int)

函数。通过就显示。不通过就不显示相关页面。。

PS:没用跳转什么的。怕出错,还得去查错。代码都是混写的。比如

if(checkPerm($int)==true){
//.....管理页面的代码;
}else{
echo "bye,bye!!";
}

论坛徽章:
0
6 [报告]
发表于 2006-04-08 08:37 |只看该作者
不要用乘法来做(乘法算是高级运算了),应该用加法或位运算!如
游览1\录入2\修改4\删除8等等。。反正是00000001 00000010 00000100 00001000这样的形式。。。
这样不需要任何比较或运算,所有权限一目了然!!比如3,就是有游览和录入权限。15就是有所有权限。
然后,想要调整权限时,比如在浏览权限上再多一个修改权限,那就直接对权限加4,得到1+4=5。就是浏览跟修改权限。。。或者是将两者异或,如00000001 XOR 00001000= 00001001就说明有浏览和删除权限。。。
个人觉得用异或最好!!这是最通用的方法!!

[ 本帖最后由 ultralqxq 于 2006-4-8 08:44 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-04-08 10:22 |只看该作者
原帖由 ultralqxq 于 2006-4-8 08:37 发表
不要用乘法来做(乘法算是高级运算了),应该用加法或位运算!如
游览1\录入2\修改4\删除8等等。。反正是00000001 00000010 00000100 00001000这样的形式。。。
这样不需要任何比较或运算,所有权限一目了然!! ...


在php如何应用呀?可以举个例子吗?

论坛徽章:
0
8 [报告]
发表于 2006-04-08 11:33 |只看该作者
举个例子就拿论坛来说吧。。
管理员有权指派会员或版主是否有发帖、修改帖、删帖、管理等权限。。
这时你可以把所有权限列出来。。。
<form id="form1" name="form1" method="post" action="">
<input type="checkbox" name="ckb[]" value="1" />发帖<br />
<input type="checkbox" name="ckb[]" value="2" />删帖<br />
<input type="checkbox" name="ckb[]" value="4" />修改<br />
.....
</form>
提交后,取得所有钩选的值,再进行异或(相加也可以,要注意的是当所需权限种类超过8个时,一个字节会放不下。。所以种类应该在8个以内为宜)。。就可以得到该会员或版主的所有全限了。。。

论坛徽章:
0
9 [报告]
发表于 2006-04-10 08:56 |只看该作者
原帖由 ultralqxq 于 2006-4-8 11:33 发表
举个例子就拿论坛来说吧。。
管理员有权指派会员或版主是否有发帖、修改帖、删帖、管理等权限。。
这时你可以把所有权限列出来。。。
<form id="form1" name="form1" method="pos ...


这个我明白,我的意思是域异的公式是如何表示!

论坛徽章:
0
10 [报告]
发表于 2006-04-10 09:45 |只看该作者
不大懂你的意思~~~如何表示??就这样表示啊。。举例:

<?php
//该例简单判断用户是否拥有删除权限。
define("browse",1);//浏览权限
define("delete",2);//删除权限
define("modify",4);//修改权限
$userpower=browse | modify; //用户所有权限,该处应该由上面的表单提交过来得到
//判断改用户是否拥有删除权限
if($userpower & delete)
{
        echo "有删除权限";
}
else
{       
        echo "没有删除权限";       
}
?>


PS:后面有位MM提醒了我,按照我们的思维,权限相加时最好用相或来做。。所以修改了一下。。。

[ 本帖最后由 ultralqxq 于 2006-4-12 08:17 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP