项目基于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('没有权限'); }; }}基于