PHP權限控制類

<?php   
/**
* 權限控制類
*/  
  
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;   
     }   
       
    /**
      * 檢查權限
      *
      * @param $usertype 角色
      * @param $purview 權限
      */  
    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;   
     }   
} 

/**
 * 示例
 * 在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";
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章