php下的权限算法的实现

 更新时间:2007年04月28日 00:00:00   作者:  
权限设计

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


最近看了别人的设计方法,大多以“整数”来表示权限值,如添加、浏览、删除和修改,分别用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 gd等比例缩放压缩图片函数

    php gd等比例缩放压缩图片函数

    这篇文章主要为大家详细介绍了php gd等比例缩放压缩图片函数,文章末尾为大家分享了php and gd 函数参考表,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • PHP7.1实现的AES与RSA加密操作示例

    PHP7.1实现的AES与RSA加密操作示例

    这篇文章主要介绍了PHP7.1实现的AES与RSA加密操作,结合实例形式分析了php7.1环境下AES与RSA加密、解密操作相关实现与使用技巧,需要的朋友可以参考下
    2018-06-06
  • php检查日期函数checkdate用法实例

    php检查日期函数checkdate用法实例

    这篇文章主要介绍了php检查日期函数checkdate用法,实例分析了php中checkdate函数的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • php GeoIP的使用教程

    php GeoIP的使用教程

    GeoIP介绍:什么是GepIP ?所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息。
    2011-03-03
  • ThinkPHP3.2.3所有的单字母方法整理总结

    ThinkPHP3.2.3所有的单字母方法整理总结

    ThinkPHP3.2.3在以前是一款广受欢迎的PHP开发框架,现在虽然除了版本5和6,但仍有不少项目使用ThinkPHP3。ThinkPHP3中的字母函数是以字母开头的一类函数,其作用是非常丰富的,包括字符串处理、文件处理、日期时间处理以及HTTP协议处理等。
    2023-07-07
  • php使用指定字符列表生成随机字符串的方法

    php使用指定字符列表生成随机字符串的方法

    这篇文章主要介绍了php使用指定字符列表生成随机字符串的方法,涉及php中rand及substr等函数操作字符串的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-04-04
  • 比较discuz和ecshop的截取字符串函数php版

    比较discuz和ecshop的截取字符串函数php版

    网上看到一篇文章 discuz和ecshop截取字符串的两个函数,比较了一下两个版本的函数,都各有局限,只能在特定的前提下使用,但是学习一下有利于拓宽思路,了解PHP的扩展功能
    2012-09-09
  • PHP回调函数概念与用法实例分析

    PHP回调函数概念与用法实例分析

    这篇文章主要介绍了PHP回调函数概念与用法,简单介绍了回调函数的概念、原理,并结合实例形式分析了回调函数的相关使用技巧,需要的朋友可以参考下
    2017-11-11
  • 屏蔽PHP默认设置中的Notice警告的方法

    屏蔽PHP默认设置中的Notice警告的方法

    很多时候其实写出来的代码的错误可以忽略或者根本就不是错误,PHP还是会显示Notice警告,well接下来我们就来介绍一下屏蔽PHP默认设置中的Notice警告的方法
    2016-05-05
  • php创建多级目录与级联删除文件的方法示例

    php创建多级目录与级联删除文件的方法示例

    这篇文章主要介绍了php创建多级目录与级联删除文件的方法,结合实例形式分析了php使用mkdir创建多级目录与unlink结合rmdir递归删除多级目录相关操作技巧,需要的朋友可以参考下
    2019-09-09

最新评论