网站地图    收藏   

主页 > 后端 > php资料库 >

ThinkPHP操作名权限控制_自学php网

来源:自学PHP网    时间:2014-12-04 22:13 作者: 阅读:

[导读] 其实ThinkPHP已经内置了RBAC权限控制,操作也很方便,不过总是感觉平常的小站没有必要用RBAC。有的时候需求很简单,权限控制只检测到操作名上,不细分到方法名上。这样做完全没有必...

其实ThinkPHP已经内置了RBAC权限控制,操作也很方便,不过总是感觉平常的小站没有必要用RBAC。有的时候需求很简单,权限控制只检测到操作名上,不细分到方法名上。这样做完全没有必要用RBAC。好处:1.节省时间(有的时候老板定的交工时间是死的)2.懒人你懂的

权限的逻辑很简单,后台给每个用户添加一个字段,暂且命名为Competenct, 然后写一个给用户赋权限的多选框,类似于

ThinkPHP操作名权限控制
 

每个多选框的值就是当前多选框的操作名,比如你有一个ArticleAction.class.php。那么你的value值就是Article。请严格区分大小写,避免平台兼容性。 然后点保存,后台代码:

foreach($_POST['Competence'] as $v){
$s.= $v.",";
}

把$s插入到Competenct字段里,这样用户表的Competenct字段里面就有了类似于Article,News,Image 这样的一条记录了。

每个网站的后台都有一个检测是否登录的方法(别跟我说你没有),ThinkPHP里RBAC的介绍:在Action文件夹下新建一个CommonAction.class.php(是不是这个名字我也不清楚了,名字无所谓),里面有个function _initialize() {}方法,你的所有类都继承了CommonAction 这样的话你的所有类操作都会首先进入_initialize()方法,当然、检测是否登录也在这个方法里。建好了这个类咱们先放一边,下一步深入到ThinkPHP/Lib/ORG/Util/下新建一个RUAC.class.php(我邪恶了),代码类似于:

<?php
class RUAC extends Think{
static public function index(){
$user = M('user');
$userlist = $user->where('username="'.$_SESSION['username'].'"')->getField('Competence');//查询User表Competence字段里面操作名
$con = explode(',',$userlist);
foreach($con as $v){
if($v == MODULE_NAME ){ //判断有无权限
return true;
}
}
}
}
?>

回到CommonAction.class.php

_initialize()方法里代码:

if(!in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE'))) && $_SESSION['username'] != 'admin'){ //C('NOT_AUTH_MODULE') //无需验证模块
import ( 'ORG.Util.RUAC' );
if(RUAC::index() != true){
$this->success('权限不够,请联系管理员开放权限');
//$this->redirect('Index/index','loading',1);
}
}

 

 

后记:

ThinkPHP/Lib/ORG/Util/下新建一个RUAC.class.php 这里的路径是ThinkPHP2.0的路径,ThinkPHP3.0的路径为ThinkPHP/Extend/Library/ORG/Util

项目中有用到uploadify的需要把uploadify设置为无需验证模块,否则上传不成功。

在无需验证模块里的C('NOT_AUTH_MODULE') 配置项是原ThinkPHP RBAC的配置项,这里我引用过来了。无需验证的模块在conf.php里以'NOT_AUTH_MODULE' =>'Public,Pass', 形式配置,逗号分隔。

后台登录操作名无需验证,否则登录也都没有权限。

超级管理员无需验证

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论