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中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
php+ajax实时输入自动搜索匹配的方法
Dec 26 PHP
分享3个php获取日历的函数
Sep 25 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
linux下php上传文件注意事项
Jun 11 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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和ACCESS写聊天室(七)
2006/10/09 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
php身份证号码检查类实例
2015/06/18 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
可实现多表单提交的javascript函数
2007/08/01 Javascript
超简单的jquery的AJAX用法
2010/05/10 Javascript
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
简介AngularJS中$http服务的用法
2016/02/06 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python入门篇之文件
2014/10/20 Python
python字符串对其居中显示的方法
2015/07/11 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
机关节能减排实施方案
2014/03/17 职场文书
诉前财产保全担保书
2014/05/20 职场文书
担保贷款承诺书
2015/04/30 职场文书
同学会感言
2015/07/30 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
解决redis批量删除key值的问题
2022/03/23 Redis