首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

无聊写的权限控制类

第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 13:15:00
支持
昵称: PHPChina  时间: 2007-12-01 12:07:00
目前还看不懂,不过个人觉得如果加上一些群组等属性就更完善了
昵称: utfqvfhpyygy  时间: 2007-12-01 13:07:00
顶一个先~~~~
昵称: forweike  时间: 2007-12-17 19:08:00
应鼓励原创精品。
昵称: T.T.R  时间: 2007-12-18 08:29:00
支持
昵称: luzhou  时间: 2007-12-18 08:33:00
恩,写的还不错!~~
昵称: dzjzmj  时间: 2007-12-18 12:27:00
昵称: forest  时间: 2007-12-18 18:27:00
复制PHP内容到剪贴板
PHP代码:
/**
  * 给角色减权限
  */
public function delPur($purview)
{
  
$this->{$this->usertype} ^= $purview;
}


减权限怎么用异或操作呢, 假设该用户本来没有这条权限,然后你再给他减去这条权限后他反而获得了权限,这样不符合逻辑吧.
昵称: chyoqin  时间: 2007-12-18 21:42:00
果然厉害!高手也!
昵称: sunfall  时间: 2007-12-21 14:22:00