2017.04.23 修改 _check 函数;
<?php
/*
* 权限过滤类,如没有许可权限,再做进一步的权限对比。
* 比如:作者对自己作品的编辑删除权限。
*
* */
class libc_Filter{
// 显示 1 ,添加 2,修改 8,删除 8
/* 作者 默认对自己的作品 有编辑的权利 ,包括 编辑和删除 */
public $isowner = 1;
/* 修改为 public */
public $perm = array (
'ls' => 1,
'read' => 1,
'write' => 2,
'edit' => 8,
'del' => 8
);
/*免检路由数组*/
private $free = array('login:get');
public $data = array();
/* 保存单例类引用 */
private static $_instance;
/* 初始化函数 */
private function __construct(){
}
public function __destruct(){
unset($this->perm);
unset($this->free);
}
/* 创建__clone方法防止对象被复制克隆 */
private function __clone(){
trigger_error('Clone is not allow!',E_USER_ERROR);
}
/* 返回单例对象 */
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}
private function _checkRoute(&$get=array()){
return $this->_isFree($get) || $this->_isRoot() || $this->_isRoute($get);
}
#菜单:是否显示本条目$query: ?m=book&c=admin&ac=list,
# insert('sss','book','book/admin/list',isA('book/admin/list')){
# if(isA('book/admin/list')==flase) return false;
# ......
#}
public function isOK(&$query){
$ary = path_array($query);
if($this->_checkRoute($ary)|| $this->isOwner($ary)){
return true;
}
return false;
}
#页面:增删改连接$query: ?m=book&c=bookls&ac=edit&id=asfdg-admin ,'删除',$path:/test.php
public function isA($query,$name,$str=null){
$url = $this->getURL($query);
if($url){
echo '<a '.$str.' href="'.$url.'" >'.$name.'</a>';
}
}
public function getURL($query){
if($this->isOK($query)){
if(View::getInstance()->sys['re_write'])
return $query = BASE_URL.$query;
else
return $query = BASE_URL.'index.php/'.$query;
}else return false;
}
public function isBT($query,$name,$str=null){
if($this->isOK($query)){
if(View::getInstance()->sys['re_write'])
$query = BASE_URL.$query;
else
$query = BASE_URL.'index.php/'.$query;
echo '<button '.$str.' type="submit" formaction="'.$query.'">'.$name.'</button>';
}
}
// 是否有访问权限
public function hasAccess(){
return $this->_checkRoute($_GET);
}
private function _check($mod,$ac=null){
$Route = View::getInstance()->auth->getAuthData('perms');
if(array_key_exists($mod,(array)$Route) and array_key_exists($ac,(array)$this->perm)){
return $Route[$mod] & $this->perm[$ac];
}
return false;
}
#是根用户?
private function _isRoot(){
if ('root'=== View::getInstance()->auth->getAuthData('ID')){
return true;
}
return false;
}
#有路由权?
private function _isRoute(&$get){
return $this->_check($get['m'],$get['ac']);
}
#是所有者?仅作为 超连接 及 按钮 是否显示的开关作用
public function isOwner(&$get){
if(!empty($get['id']) && $this->isowner){
$ary = explode('-',$get['id']);
if(count($ary) > 1){
$uid = $ary[1];
if(strcmp($uid,View::getInstance()->auth->getAuthData('ID'))===0){
return true;
}
return false;
}
return false;
}
return false;
}
# 免检路由?
private function _isFree(&$get){
return in_array($get['m'].':'.$get['ac'],$this->free);
}
}
?>