加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

有关PHP位运算的简单权限设计

发布时间:2022-07-22 10:23:11 所属栏目:PHP教程 来源:互联网
导读:本篇文章是对PHP位运算的简单权限设计进行了详细的分析介绍,需要的朋友参考下 1.写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个 任务。关于二进制数的位运算,常见的就是或、与、非这三种简单运算
  本篇文章是对PHP位运算的简单权限设计进行了详细的分析介绍,需要的朋友参考下
 
  1.写在最前面
 
  最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个 任务。关于二进制数的位运算,常见的就是“或、与、非”这三种简单运算了,当然,我也查看了下PHP手册,还有“异或、左移、右移”这三个运算。记得上初 中时数学老师就开始唠叨个不停了,在此我也不想对此运算再作额外的说明,直接进入正题。
 
  2.如何定义权限
 
  将权限按照2的N次方来定义值,依次类推。为什么要这样子定义呐?这样子定义保证了每个权限值(二进制)中只有一个1,而它恰好对应一种权限。比如:
 
  复制代码 代码如下:
 
  define('ADD', 1); // 增加权限
 
  define('UPD', 2); // 修改权限
 
  define('SEL', 4); // 查找权限
 
  define('DEL', 8); // 删除权限
  
  3.实现简单的权限类和角色类
 
  运用上面的权限操作方法,可以简单地封装成一个权限类和一个角色类。
 
  复制代码 代码如下:
 
  /**
 
  * 简单权限类
 
  */
 
  class Peak_Auth {
 
  /**
 
  * 权限类计数器
 
  * 作用在于生成权限值
 
  *
 
  * @var in
 
  */
 
  protected static $authCount = 0;
 
  /**
 
  * 权限名称
 
  *
 
  * @var string
 
  */
 
  protected $authName;
 
  /**
 
  * 权限详细信息
 
  *
 
  * @var string
 
  */
 
  protected $authMessage;
 
  /**
 
  * 权限值
 
  *
 
  * @var int 2的N次方
 
  */
 
  protected $authValue;
 
  /**
 
  * 构造函数
 
  * 获取父角色的权限
 
  */
 
  protected function fetchParenAuthValue() {
 
  if ($this->parentRole) {
 
  $this->authValue |= $this->parentRole->getAuthValue();
 
  }
 
  }
 
  /**
 
  * 给予某种权限
 
  *
 
  * @param Peak_Auth $auth
 
  * @return Peak_Role 以便链式操作
 
  */
 
  public function allow(Peak_Auth $auth) {
 
  $this->fetchParenAuthValue();
 
  $this->authValue |= $auth->getAuthValue();
 
  return $this;
 
  }
 
  /**
 
  * 阻止某种权限
 
  *
 
  * @param Peak_Auth $auth
 
  * @return Peak_Role 以便链式操作
 
  */
 
  public function deny(Peak_Auth $auth) {
 
  $this->fetchParenAuthValue();
 
  $this->authValue &= ~$auth->getAuthValue();
 
  return $this;
 
  }
 
  /**
 
  * 检测是否拥有某种权限
 
  *
 
  * @param Peak_Auth $auth
 
  * @return boolean
 
  */
 
  public function checkAuth(Peak_Auth $auth) {
 
  return $this->authValue & $auth->getAuthValue();
 
  }
 
  /**
 
  * 获取角色的权限值
 
  *
 
  * @return int
 
  */
 
  public function getAuthValue() {
 
  return $this->authValue;
 
  }
 
  }。
 

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读