博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
权限控制 模式
阅读量:6245 次
发布时间:2019-06-22

本文共 1843 字,大约阅读时间需要 6 分钟。

项目基于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://www.cnblogs.com/freefei/archive/2013/05/27/3235000.html

你可能感兴趣的文章
【总结整理】微信7年起起伏伏的理解
查看>>
Javascript多线程引擎(九)
查看>>
Handler和AsyncTask
查看>>
Microbit Turnipbit 孩子也能做的声光控开关
查看>>
通过SHELL并发获下载数据
查看>>
web安全之SQL注入---第三章 如何寻找sql注入?
查看>>
JAVA通过继承Thread来创建线程
查看>>
C#控制台"*"绘制空心菱形
查看>>
Android中JNI编程详解
查看>>
演练Ext JS 4.2自定义主题
查看>>
【tensorflow】1.安装Tensorflow开发环境,安装Python 的IDE--PyCharm
查看>>
【maven】 pom.xml详解
查看>>
LINQ中的OrderBy实现多字段升序、降序排序实现
查看>>
idea14导入eclipse项目并部署运行完整步骤
查看>>
杀死O2O的三大杀手?!
查看>>
<Android 应用 之路> 百度地图API使用(1)
查看>>
Java的结构之美【1】——构造对象
查看>>
Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效
查看>>
「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null
查看>>
第一章 计算机系统漫游
查看>>