Yii基于角色的访问控制(非Rbac)
今天遇到了权限控制的问题,后台不同级别的用户登录后看到的内容是不一样的。网上查了下,说Yii中有自带的RBAC权限控制,大概看了下,没理解太明白。然后就是采用filter进行过滤验证,看着这个还不错。下面简单说下我是我怎么用的,不对的地方希望大神们给予指教。
1.在cp_user表里增加了一个level字段,代表用户的级别,1代表管理员admin,2代表普通用户common_user
2.在components的UserIdentity.php里添加用户角色
class UserIdentity extends CUserIdentity
{/*** Authenticates a user.* The example implementation makes sure if the username and password* are both 'demo'.* In practical applications, this should be changed to authenticate* against some persistent user identity storage (e.g. database).* @return boolean whether authentication succeeds.*/public function authenticate(){$username=strtolower($this->username);$user=User::model()->find('LOWER(username)=?',array($username));if($user===null)$this->errorCode=self::ERROR_USERNAME_INVALID;else if($user->password!=$this->password)$this->errorCode=self::ERROR_PASSWORD_INVALID;else{$this->username=$user->username;$this->setState('roles', $user->level==1?'admin':'commen_user'); //添加用户角色$this->errorCode=self::ERROR_NONE;}return $this->errorCode==self::ERROR_NONE;}}
上面这句$this->setState('roles',$user
->level==1?
'admin'
:
'commen_user'
)非常重要,这里表示添加了一个用户的角色
3.重写CWebUser,放在components文件夹下(WebUser.php)
class WebUser extends CWebUser
{/*** Overrides a Yii method that is used for roles in controllers (acce***ules).** @param string $operation Name of the operation required (here, a role).* @param mixed $params (opt) Parameters for this operation, usually the object to access.* @return bool Permission granted?*/public function checkAccess($operation, $params=array()){if (empty($this->id)) {// Not identified => no rightsreturn false;}$role = $this->getState("roles");if ($role ==='admin') { //管理员return true; // admin role has access to everything}// allow access if the operation request is the current user's rolereturn ($operation === $role);}
}
4.控制器里修改
public function filters(){return array('accessControl', // perform access control for CRUD operations'postOnly + delete', // we only allow deletion via POST request);}/*** Specifies the access control rules.* This method is used by the 'accessControl' filter.* @return array access control rules*/public function acce***ules(){return array(array('allow', // allow all users to perform 'index' and 'view' actions'actions'=>array('index','view','login','passwordupdate'),'users'=>array('*'),),array('allow', // allow authenticated user to perform 'create' and 'update' actions'actions'=>array('create','update','getuser','delete'),'roles'=>array('admin'),//表示只有角色为admin的用户才能访问),array('deny', // deny all users'users'=>array('*'),),);}
5.修改配置文件main.php
'user'=>array(// enable cookie-based authentication'class'=>'WebUser','allowAutoLogin'=>true,'loginUrl' => array('/user/login'),),
6.视图中如何用?
array('name'=>'status', 'type'=>'html', 'value'=>'Customer::showStatus($data->status, $data->id)','visible'=> Yii::app()->user->checkAccess('admin')),array('name'=>'employee_id', 'type'=>'html', 'value'=>'Customer::isDivided($data->employee_id, $data->id)','visible'=> Yii::app()->user->checkAccess('admin')),
原理:当用户登录的时候,获取用户的level字段,并添加相应的角色,若是1则该用户为admin,否则就是common_user.然后重写CWebUser中的checkAccess方法,如果是admin,则有权操作相应的权限。最后在控制器里rules里定义规则,有一个roles属性,我们给它设置为admin,表示只有角色为admin的才能进行相关的action操作。
转载于:https://blog.51cto.com/php2013/1363163
Yii基于角色的访问控制(非Rbac)相关推荐
- 基于角色的访问控制(RBAC)
来自:编程新说 很多时候,需要对一些事物进行控制,如一个房间,为了不让人随便进,通常会装一把锁,如果要想进入,你必须得有一把钥匙,且还得和这个锁匹配才行. 基于此做一个抽象,其实包含三方面内容: 1) ...
- [ Azure - IAM ] Azure 中的基于角色的访问控制 (RBAC) 与基于属性的访问控制 (ABAC)
在任何公司中,网络用户必须先经过身份验证和授权,然后才能访问可能导致安全漏洞的系统部分.获得授权的过程称为访问控制.在本文中,我将讨论管理系统访问控制的两种主要方法--基于角色的访问控制 (RBAC) ...
- Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制
InfoQ有幸采访了Microsoft执行副总裁Scott Guthrie,请他谈了谈Azure以及他最近的Red Shirt Dev Tours(红杉开发之旅)[译注1].昨天我们谈到了Azure提 ...
- 针对访问控制列表ACL 与 基于角色的访问控制RBAC进行简单介绍
2019独角兽企业重金招聘Python工程师标准>>> 访问控制列表(Access Control List,ACL) ACL是最早也是最基本的一种访问控制机制,它的原理非常简单:每 ...
- RBAC 基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- 基于角色的访问控制模型(RBAC)——学习笔记
基于角色的访问控制模型(RBAC),英文全称Role-Base Access Control,是20世纪90年代推出的一种访问控制模型,模型通过角色(Role)将用户(User)和访问许可(Permi ...
- k8s、ServiceAccount权限详解、RBAC 详解(基于角色的访问控制),常用操作指令
文章目录 Service Account应用示例 RBAC 详解(基于角色的访问控制) 创建一个角色(role)---权限 实验二 常用操作指令 Service Account应用示例 概念图权限关系 ...
- RBAC(基于角色的访问控制权限的基本模型)
(一)基本概念 1.定义 RBAC(Role-Based Access Control),也就是所谓的**"基于角色的访问控制权限"**. 2.优势 在RBAC中,用户不再直接与权 ...
- .Net Core实战之基于角色的访问控制的设计
前言 上个月,我写了两篇微服务的文章:<.Net微服务实战之技术架构分层篇>与<.Net微服务实战之技术选型篇>,微服务系列原有三篇,当我憋第三篇的内容时候一直没有灵感,因此先 ...
最新文章
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
- Unicorn 4.6.3 发布,Rack的HTTP服务器
- Android判断当前的android设备是否处于联网状态
- 【超简单】MySQL存储引擎的选择与配置
- libvirt(virsh命令介绍)
- 多轮对话之对话管理:Dialog Management
- VTK:Utilities之RenderScalarToFloatBuffer
- noi.ac #543 商店
- JAVA内存模型与线程安全
- php版主动推送,织梦php主动推送完整实例(单篇推送版本)
- 笔记本电脑键盘切换_2019年最好的2500元以内的笔记本电脑
- ORACLE常用监控语句(未完待续)
- Layui Ajax请求时加上 load 加载效果
- AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)
- 条件表达式的学习和使用 实例之闰年的判断
- 【2022考石开正攵★氵台】思维导图
- 怎样批量给pdf文件添加水印?
- 微信小程序开发得会议扫码签到系统
- git clone加速(实测推荐)
- 追踪邮件发送者的地理位置