Fork me on GitHub
代码改变世界

权限控制 模式

2013-05-27 16:40  freefei  阅读(421)  评论(0编辑  收藏  举报

项目基于thinkphp 框架 权限控制模式,基于节点控制

1 基于角色的权限控制,角色自由创建自定义。
2 用户模型 需要一个字段确定 用户所基于的角色。
3 节点配置文件node.php 定义节点数组

案例
<?php
return array(
'home'=>array(
'name'=>'后台主页',
'nodeType'=>'c',
'nodes'=>array('Admin.Index.index','Admin.Index.count')
),
'access'=>array(
'name'=>'更新缓存',
'nodeType'=>'c',
'nodes'=>array('Admin.Index.cache')
),
'bbs'=>array(
'name'=>'论坛浏览',
'nodeType'=>'c',
'nodes'=>array('Bbs.Admin.list_cont','Bbs.Admin.index','Bbs.Admin.view')
),
?>

4 函数 验证节点

/*
*权限判定函数
*/
function access_r($uid,$app,$m,$a){
$nodes = include('./node.php'); //节点数组
$thisNode =$app.'.'.$m.'.'.$a;
//dump($thisNode);
foreach($nodes as $key=>$value){
//dump($value['nodes']);
if(in_array($thisNode,$value['nodes'])){
$no = array('key'=>$key,'name'=>$value['name'],'nodeType'=>$value['nodeType']);
}
}
// if(!is_array($no)){return true;}//没有这个节点跳出
//检查是否是管理员
if(M('member')->where(array('uid'=>$uid))->getField('uid')==1){return true;}
$userInfo = M('member')->where(array('username'=>$uid))->find();

// if($userInfo['cid'] =='' || $userInfo['cid'] ==0){return false;}
// $cinfo = M('company')->where(array('cid'=>$userInfo[cid]))->find();
// if($cinfo['uid'] == $uid){return true;}

//检查是否分配权限
// $where['username'] = $uid;
$where['zid'] = $userInfo['zid'];
//$where['jid'] = $userInfo['jid'];
$where['_logic'] = 'or';
$map['_complex'] = $where;
//$map['cid'] = $userInfo[cid];
$map['key'] = $no['key'];

if(is_array(M('access')->where($map)->find())){return true;}//有赋予权限跳出

return false;
}

5 ,底层控制器验证那些权限 action
[php]
function __construct() {
//权限控制
if($_GET['app']=='Admin' or MODULE_NAME=="Admin"){
if(!access_r($this->mid,$_GET[app],MODULE_NAME,ACTION_NAME)){
$this->error('没有权限');
};
}
}

基于

@ https://github.com/ranmufei

校友通微信小程序

校友通微信小程序