<?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";}