转:权限设计 有用质数组成权限集合的,有用2的n次幂组成权限值集合的,我都是用直接将用户和权限代码(自定义格式)存储的,判断时,wh

winder 2006-06-20 07:15:30
转:权限设计 有用质数组成权限集合的,有用2的n次幂组成权限值集合的,我都是用直接将用户和权限代码(自定义格式)存储的,判断时,where in ( 权限代码 ),大家讨论讨论,各利弊?

转:权限设计(又忘了作者和来源)
==================================================
[编程思路]权限设计
大概有这几种模式:
用户+组+角色+权限
用户+组+权限
用户+角色+权限
用户+权限

最近看了别人的设计方法,大多以“整数”来表示权限值,如添加、浏览、删除和修改,分别用1、2、4、8这几个整数来代替,不过,各人的

做法有所不同,举例如下:

1.用2的n次幂组成权限值的集合,如1、2、4、8、16...,某用户的权限值为其子集中的整数之和,如 7=1+2+4,5=1+4。如果要从数据库检索

包含某几种权限的用户,则先把这几种权限值相加,假设和为k,然后select * from table where 1 and 用户权限值 = 'k';如果要判断某用

户有哪些权限,则取出其权限值k,分别用k&1,K&2,K&4,k&16...,如果为真,则表示有值等于“&”右边整数的权限,例如,如果k&4为真,则此

用户有权限表中值等于4的权限;

2.用质数2、3、5、7、11...组成权限集合,某用户的权限为其子集中各整数的乘积,如 210 = 2*3*5*7,我觉得这种方法很有趣,难点在于如

何分解质因数;但我有些不认同原作者的提法,他认为权限之间可能存在包含关系,如某用户有删除权限,则其一定有浏览权限,要不然就没

法删除,事实确实是这样,不过我认为这样太复杂了,容易出错,我觉得权限最好是“原子”的,互不干扰,也就是说某用户有删除权限而没

浏览权限则其无法进行删除操作,因为他看不到东西,解决这个矛盾的关键是在给用户赋权时,把浏览权限也赋给他;

3.不用整数,而是用“向量表”方法(也许我说的不一定对),把所有可能的权限按一定的顺序排列,如添加、浏览、修改、删除...,用户的

权限值为固定100位长度的字符串,如100010100001....01,从左起每一位对应一种操作权限,如果有这种权限,则此位的值为1,反之,则为0

,作者之所以把用户权限值固定为100位,我想是考虑到升级问题,但我认为这还不够科学,我认为用户的权限值长度应小于权限个数,举例如

下:
权限排列表:添加、浏览、修改、删除,用户A有添加和浏览的的权限,则其权限值为11,用户B有浏览和修改的权限则其权限值为011,用户C

有浏览和删除的权限则其权限值为0101,这样设计的好处为:当权限表中增加别的权限时,不会影响用户表或角色表;

4.我曾经的做法,在后台管理中把权限分为两大类:栏目权限和操作权限,每个栏目对应一个目录,操作权限细分为浏览、添加、修改和删除

,用户进入系统后首先判断有没有栏目权限,然后判断有没有操作权限,判断栏目权限相对简单一些,首先获取访问页面的路径path,然后分

解出目录,对应用户拥有的目录权限,如果此目录包含在用户有权管理的目录数组中(从数据库取出),则其有进入此目录的权限,否则,没

有,然而,在判断操作权限好象有些麻烦,但突然想到添加、浏览、修改和删除与我的文件命名规则是基本是对应的,但有点不同的是,我把

添加和删除的功能合并在一个文件中了,例如文件名为proAddEdit.php,幸好意识到修改文件时多了个传递参数id,于是,我用正则解决了这

个问题,今天看来,这种方法似乎过时了,因为不适应面向对象的思想和用框架体系来开发系统!

...全文
480 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
FIREGUNS 2006-06-22
  • 打赏
  • 举报
回复
动网的那种就挺好吧?
Cain 2006-06-22
  • 打赏
  • 举报
回复
1是我常用的方法
3我曾经偶尔用过

决定尝试一下第2种方法
Gdj 2006-06-22
  • 打赏
  • 举报
回复
mark
ImN1 2006-06-21
  • 打赏
  • 举报
回复
还是不要用路径分权限吧
testoktest 2006-06-21
  • 打赏
  • 举报
回复
“把权限分为两大类:栏目权限和操作权限,每个栏目对应一个目录,”?
“用户进入系统后首先判断有没有栏目权限,然后判断有没有操作权限”?
“操作权限细分为浏览、添加、修改和删除”?

这个是仿照操作系统的权限设置?
用户A对a文件有写权限,能不能区分到写文件名,写创建时间,写内容
比如用户A审核a文件,他可以修改文件标题
然后交给用户B审核,他可以修改文件标题和内容,那这个用路径分权限怎么设置,那得把操作权限分得很细,那这和路径有什么关系?
这个大概用在业务流涉及少的地方,像发发新闻,跟跟留言,不涉及流程,发就发了,说就说了

他也说了:今天看来,这种方法似乎过时了,因为不适应面向对象的思想和用框架体系来开发系统
iasky 2006-06-21
  • 打赏
  • 举报
回复
mark
winder 2006-06-21
  • 打赏
  • 举报
回复
用路径分权限的局限性在哪里?
testoktest 2006-06-20
  • 打赏
  • 举报
回复
以目录名和文件名来判断是否有局限性?
权限主要是在业务流上的应用把,这个流上的有多少环节,每个环节可以操作哪些东西,每个东西有哪些操作方式,在每个环节新建一些组,把一些操作方式付给他们,是否用一个字段的编码方式来保存权限,或者用多条记录保存,这和权限关系也不大吧,每当一步操作,判断是流上的哪个环节,操作者在该环节的哪个组,改组是否有对该东西的该步操作
ImN1 2006-06-20
  • 打赏
  • 举报
回复
这几天正在研究这个

有一种想法,因为php有很强大的数组函数,尤其是交集/差集函数,想利用一下
不过暂时还没有最后方案出来

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧