php下的权限算法的实现_php技巧

权限设计

大概有这几种模式

用户+组+角色+权限

用户+组+权限

用户+角色+权限

用户+权限

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

1.用2的n次幂组成权限值的集合如1、2、4、8、16...某用户的权限值为其子集中的整数之和如 7=1+2+45=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于是我用正则解决了这个问题今天看来这种方法似乎过时了因为不适应面向对象的思想和用框架体系来开发系统

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

时间: 2024-08-28 03:15:02

php下的权限算法的实现_php技巧的相关文章

PHP简单实现上一页下一页功能示例_php技巧

本文实例讲述了PHP简单实现上一页下一页功能.分享给大家供大家参考,具体如下: 思路整理: 现在好多人用id的增1和减1实现上一篇和下一篇,但是难道文章ID不会断了吗?所以你要知道上个ID和个ID是多少就OK了. 那怎么解决这个问题呢,很简单! 例子: 假如这篇文章的ID200 <a href="?action=up&id=200">上一篇</a> <a href="?action=down&id=200">下一篇

解析Ubuntu下crontab命令的用法_php技巧

cron是一个Linux下的后台进程,用来定期的执行一些任务.因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效,但其他系统应该也差不多. 想要让cron执行你指定的任务,首先就要编辑crontab文件.crontab是一个文本文件,用来存放你要运行的命令.你可以以下命令crontab -e  来打开你的用户所属的crontab文件.第一次用这个命令,会让你选择文本编辑器,我选的是vim.选定的编辑器也可以使用select-editor  命令来更改.这点命令行中已

php下Memcached入门实例解析_php技巧

本文较为详细的讲述了php下Memcached的入门知识与实例.分享给大家供大家参考.具体如下: memcache 在什么情况下被使用,什么情况下不要使用? 你在何时应该使用 memcache,又要在何时避免使用它?现在你已经知道了,memcahced 是被设计为减轻数据库教程端压力的,但是你最好能制定一个良好的策略,来想办法让 memcached 来尽可能的缓存那些最影响性能的查询,你可以试着为应用中的所有查询做一些执行时间日志,可以帮助你来分析哪些内容是要重点被缓存的. 现在假设你正在运营一

php计算指定目录下文件占用空间的方法_php技巧

本文实例讲述了php计算指定目录下文件占用空间的方法.分享给大家供大家参考.具体分析如下: php中可以通过 RecursiveDirectoryIterator 扩展 DirectoryIterator的getChildren() 方法提供访问子目录中的每一个元素的方法,下面的代码通过遍历访问目录下的所有文件,获取他们暂用的空间. <?php $dir = new RecursiveDirectoryIterator('C:\wamp'); $totalSize = 0; foreach (n

PHP学习笔记 IIS7下安装配置php环境_php技巧

Php如何安装 Php版本的选择 Php在windows下的(php5.4.7)有两种版本: VC9 x86 Non Thread Safe 非线程安全型 以FastCGI模式运行 VC9 x86 Thread Safe 线程安全性 以ISAPI模式运行 安装过程 只需要解压上一步的zip包即可,然后配置php.ini 详见Php如何配置 Mysql如何安装 下载Mysql database msi安装文件,安装提示下一步即可. Php如何配置 Php的zip包解压后,在根目录下找到php.in

php flush无效,IIS7下php实时输出的方法_php技巧

在一个比较费时的操作中,想把操作记录在浏览器上实时显示出来,用到了flush(),把缓冲中的内容发送到浏览器.但在iis7里面用fastcgi模式配置的php怎么都实现不了,结果总是一起显示出来. for ($i=10; $i>0; $i--) { echo $i.'<br />'; @ob_flush(); flush(); sleep(1); } 上面的代码在IIS的默认设置下是无法逐渐显示结果的.解决办法如下: 打开文件 C:\Windows\System32\inetsrv\co

php获取文章上一页与下一页的方法_php技巧

本文实例讲述了php获取文章上一页与下一页的方法.分享给大家供大家参考.具体方法如下: 今天发现一个站的上一页与下一页出现问题,上一页没有问题但是在下一页是直接到了本频道最新发布的文章了,按原理应该是文章本身ID的前与后的ID才是上下页吧,下面我来与大家详细讲述一下. 先看个例子:1,2,3,4,5. 假如上面5个是ID了,我要对上一页排序直接使用order by id desc,如我当前ID为3那么出来的是2才对,对下一页我们要用order by id asc得出的排序应该是,4,好了原理就这

PHP采用自定义函数实现遍历目录下所有文件的方法_php技巧

目录的遍历是PHP程序设计中经常会用到的一个功能,很多PHP项目都有这一功能模块.今天本文就来实例解析一下PHP采用自定义函数实现遍历目录下所有文件的方法.具体方法如下: 方法一:使用readir()遍历目录 实现代码如下: function listDir($dir) { if(is_dir($dir)) { if($handle = opendir($dir)) { while($file = readdir($handle)) { if($file != '.' && $file !

Discuz!下Memcache缓存实现方法_php技巧

前言:在PHP+MySQL架构的站点中,本文重点从MySQL的角度去分析如何使Discuz!论坛(或者类似的PHP+MySQL架构的程序)应对大访问量.同时给出一些使用Memcache去减轻MySQL压力的建议.其中很多数据是个人测试的结果,如有不同意见,敬请留言告之.另外由于个人思维的问题,行文比较跳跃,特此声明! 系统分析:单纯的从MySQL的角度出发,单台MySQL的数据库负载到每天上亿次的操作(每秒大概1100次MySQL操作,然后乘以86400)应该不是非常困难的事情.按照这个数据也就