php下的权限算法的实现


Posted in PHP onApril 28, 2007

权限设计

大概有这几种模式:
用户+组+角色+权限
用户+组+权限
用户+角色+权限
用户+权限

最近看了别人的设计方法,大多以“整数”来表示权限值,如添加、浏览、删除和修改,分别用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,于是,我用正则解决了这个问题,今天看来,这种方法似乎过时了,因为不适应面向对象的思想和用框架体系来开发系统!

以上是个人粗浅的认识和描述,若有错误,请各位指正,希望高人给些意见! 

PHP 相关文章推荐
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
PHP_MySQL教程-第一天
Mar 18 PHP
PHP 组件化编程技巧
Jun 06 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
php快速排序原理与实现方法分析
May 26 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
Jan 26 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 PHP
php 中的str_replace 函数总结
Apr 27 #PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 #PHP
escape unescape的php下的实现方法
Apr 27 #PHP
mysql 全文搜索 技巧
Apr 27 #PHP
mysql 搜索之简单应用
Apr 27 #PHP
mysql 字段类型说明
Apr 27 #PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 #PHP
You might like
php中文件上传的安全问题
2006/10/09 PHP
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
PHP获取网站域名和地址的代码
2008/08/17 PHP
php mssql 数据库分页SQL语句
2008/12/16 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
javascript调试说明
2010/06/07 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
详解参数传递四种形式
2015/07/21 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
python是否适合网页编程详解
2019/10/04 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
好的自荐信的要求
2013/10/30 职场文书
自强之星事迹材料
2014/05/12 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
教育实习指导教师评语
2014/12/31 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
Python if else条件语句形式详解
2022/03/24 Python