ThinkPHP操作名权限控制

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

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

每个多选框的值就是当前多选框的操作名,比如你有一个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‘, 形式配置,逗号分隔。

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

超级管理员无需验证

文章均属 松林‘s blog 原创 转载请注明转自  松林‘s blog

本文地址 : http://www.songlin51.com/archives/864.html

时间: 2024-12-10 04:47:20

ThinkPHP操作名权限控制的相关文章

基于thinkphp的RBAC权限控制

RBAC  Role-Based Access Control 权限控制在后台管理中是十分常见的,它的模型大体上是下面这张图的形式 我用的字段和上面不一样,图只是个示例 一个简易的权限控制模型只需要3个表就行了 user表:记录用户的信息和用户的角色 ->user_id:用户的id ->user_role_id:用户的角色信息  0,1,2分别为超级管理员,经理,员工 ->其它省略... role表:记录不同的角色信息,和他们拥有的权限 ->role_id:角色的id    1为经

spring security 3.1 实现权限控制

简单介绍:spring security 实现的权限控制,能够分别保护后台方法的管理,url连接訪问的控制,以及页面元素的权限控制等, security的保护,配置有简单到复杂基本有三部: 1) 採用硬编码的方式:详细做法就是在security.xml文件里,将用户以及所拥有的权限写死,通常是为了查看环境搭建的检查状态. 2) 数据库查询用户以及权限的方式,这种方式就是在用户的表中直接存入了权限的信息,比方 role_admin,role_user这种权限信息,取出来的时候,再将其拆分. 3)

(1.3.3)权限控制

概述:登录身份验证仅限于控制是否可以访问sql server实例.当用户完成登录后,用户所能实现的操作通过权限控制进行约束. 1.权限控制体系概述 sql server的权限体系由主体和安全对象两部分构成. [1]主体是资源访问的请求者.它是请求访问sql server资源的实体,每个主体都具有一个安全标识符(SID).主体的影响范围取决于主体定义的范围(windows.服务器或数据库)以及主体是否不可分或是一个集合(例如,windows登录名不是一个可分的主体,而windows组则是一个集合主

软件开发的权限控制和权限验证

在开发软件时,我们经常会遇到账号体系,那么就不可避免地涉及到了权限控制或者叫权限管理. 很多人容易把权限控制和权限验证搞混淆,以为在前端隐藏了某个按钮就控制好权限了,其实用户可以直接发送一个接口请求服务端来完成这个操作. 权限控制是指在一个系统中存在多个用户角色,不同的角色拥有不同的系统资源访问权限,它的实现更直观地体现在客户端的用户界面中. 例如,针对VIP用户,很多功能都是可以用的,但是在普通用户的客户端界面上,同样的按钮有时是置灰的或者隐藏的. 权限验证是指系统服务器针对客户端发送过来的请

08 SSM整合案例(企业权限管理系统):08.权限控制

04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 1.数据库与表结构 如果删除TABLE ,需要先删除多对多创建的中间表后,才能删除其它表. 1.1 用户表 oracle数据库 -- 1.1.2 sql语句 CREATE TABLE users( id varchar2(32) default SYS_GUID() PRIMARY KEY, em

thinkphp权限控制

thinkphp3.2 auth权限 ThinkkPHP中的Auth类是权限控制类,实现权限控制,它提供给了我们三张表. think_auth_rule表:认证规则表, think_auth_group:权限认证组表:网站中所有的分类部门表 think_auth_group_access:记录用户属于那个部门的 PS:最近需要做一个验证用户权限的功能,在官方和百度看了下,发现大家都是用auth来做验证,官方有很多auth的使用教程,但是都不全面,我也提问了几个关于auth的问题 也没人来回答我,

基于资源名的MVC权限控制

在程序复杂程度不断上升的过程中,无可避免需要触碰到权限控制,而权限控制又与业务逻辑紧紧相关,市场上出现了大量的权限控制产品,而程序的开发,讲究去繁化简的抽象,在我的开发过程中,逐渐发现程序的权限控制核心不外乎两个方面:1.资源定位:2.访问控制列表.本文主要针对资源定位进行分析,并解决一些我所遇见过的问题.而在MVC上,MVC提供给我们了非常好的访问控制扩展机制,我们能够通过这些机制更好地控制系统权限. 在我们之前的开发中,针对ASP.NET下WebForm进行开发,很多人都采用了继承Page基

使用Lync 2013 基于角色的权限控制:RBAC 给用户分配指定的操作权限

使用场景: 在大型的Lync统一沟通系统的日常运维中,我们需要为不同角色的管理员分配不同的Lync管理权限,在Lync Server 2013上面就使用了基于角色的权限控制:RBAC ,它里面分了多种权限角色,包括 CsAdministrator,CsUserAdministrator,CsVoiceAdministrator,CsServerAdministrator,CsViewOnlyAdministrator,CsHelpDesk等等,不同的角色有不同的Lync管理权限, 例如,当我们只

RABC权限控制(页面操作角色,权限和进行分配)

上一节主要说的是如何通过url进行权限控制,这一节就说一下如何开发一个权限控制的界面,这样我们就能很方便的创建角色,并分配给用户不同角色和不同权限. 1.编写角色管理页面 这个编写较为简单,主要是通过modelform快速实现的,下面代码比较简单,我就不多说了 效果图如下: 代码如下: def role_list(request): """角色列表""" roles_list = Role.objects.all() # 分页 current_p