+ -
当前位置:首页 → 问答吧 → 无聊写的权限控制类

无聊写的权限控制类

时间:2007-11-30

来源:互联网

第1次写2进制的东西,写的不好,大家帮忙扩展和改进!
类文件:
复制PHP内容到剪贴板
PHP代码:

<?php
/**
* Displays : 权限控制类
* Author   : phpox
* Date     : Fri Nov 30 13:13:48 CST 2007
*/

class include_purview 
{
/**
  * 类的唯一实例
  */
private static $instance;

/**
  * 权限常量
  */
const SELECT = 0x1; //查询
const CREATE = 0x2; //添加
const EDIT   = 0x4; //修改
const DELETE = 0x8; //删除

/**
  * 角色
  */
private $annoy = ''; //匿名用户
private $user  = ''; //注册用户
private $admin = ''; //管理用户
private $usertype = 'annoy';
private $hashtable = array(1=>'查询',2=>'添加',4=>'修改',8=>'删除');

/**
  * 
  */
public function __set($name,$value)
{
  if ($name == 'usertype')
  {
   if ($value != '')
   {
    $this->usertype = $value;
   }
  }
}

/**
  * 构造函数 给角色赋予权限
  */
private function __construct()
{
  $this->annoy = self::SELECT;
  $this->user = self::SELECT | self::CREATE;
  $this->admin = self::SELECT | self::CREATE | self::EDIT | self::DELETE;
}

/**
  * 获取类的唯一实例
  */
public static function getInstance()
{
  if (self::$instance === null){
         self::$instance = new include_purview();
     }
     return self::$instance;
}

/**
  * 检查权限
  */
public function check($purview)
{
  if ($this->{$this->usertype} & $purview)
  {
   return true;
  }
  return false;
}

/**
  * 给角色加权限
  */
public function addPur($purview)
{
  $this->{$this->usertype} |= $purview;
}

/**
  * 给角色减权限
  */
public function delPur($purview)
{
  $this->{$this->usertype} ^= $purview;
}

/**
  * 返回角色拥有的权限
  */
public function getPur()
{
  $arr = array();
  foreach ($this->hashtable as $k => $v)
  {
   if ($k & $this->{$this->usertype})
   {
    $arr[] = $v;
   }
  }
  return $arr;
}
}

示例:
复制PHP内容到剪贴板
PHP代码:
/**
* 示例
*/
//在session中读用户组
@session_start();
$_SESSION['role'] = 'user';
//获取权限类的实例
$pruview = include_purview::getInstance();
//设置角色
$pruview->usertype = $_SESSION['role'];
//获取该角色拥有的权限
$arr = $pruview->getpur();
echo '该用户的权限有:'.join(',',$arr)."\n";
//判断执行的操作是否有权限
if (true === $pruview->check(include_purview::CREATE ))
{
create(); //要执行的操作
}
else 
{
exit('您没有权限!');
}
//去掉用户的添加权限
$pruview->delPur(include_purview::CREATE );
$arr = $pruview->getpur();
echo '该用户的权限有:'.join(',',$arr)."\n";
//执行添加操作
if (true === $pruview->check(include_purview::CREATE ))
{
create(); //要执行的操作
}
else 
{
echo '您没有权限!'."\n";
}
//加上用户的添加权限
$pruview->addPur(include_purview::CREATE );
$arr = $pruview->getpur();
echo '该用户的权限有:'.join(',',$arr)."\n";
//执行添加操作
if (true === $pruview->check(include_purview::CREATE ))
{
create(); //要执行的操作
}
else 
{
exit('您没有权限!');
}
//具体的操作
function create()
{
echo '执行了添加操作'."\n";
}

输出结果:
该用户的权限有:查询,添加
执行了添加操作
该用户的权限有:查询
您没有权限!
该用户的权限有:查询,添加
执行了添加操作

作者: niohe   发布时间: 2007-11-30

支持

作者: PHPChina   发布时间: 2007-12-01

目前还看不懂,不过个人觉得如果加上一些群组等属性就更完善了

作者: utfqvfhpyygy   发布时间: 2007-12-01

顶一个先~~~~

作者: forweike   发布时间: 2007-12-17

应鼓励原创精品。

作者: T.T.R   发布时间: 2007-12-18

支持

作者: luzhou   发布时间: 2007-12-18

恩,写的还不错!~~

作者: dzjzmj   发布时间: 2007-12-18

作者: forest   发布时间: 2007-12-18

复制PHP内容到剪贴板
PHP代码:
/**
  * 给角色减权限
  */
public function delPur($purview)
{
  $this->{$this->usertype} ^= $purview;
}

减权限怎么用异或操作呢, 假设该用户本来没有这条权限,然后你再给他减去这条权限后他反而获得了权限,这样不符合逻辑吧.

作者: chyoqin   发布时间: 2007-12-18

果然厉害!高手也!

作者: sunfall   发布时间: 2007-12-21