今天遇到了权限控制的问题,后台不同级别的用户登录后看到的内容是不一样的。网上查了下,说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)相关推荐

  1. 基于角色的访问控制(RBAC)

    来自:编程新说 很多时候,需要对一些事物进行控制,如一个房间,为了不让人随便进,通常会装一把锁,如果要想进入,你必须得有一把钥匙,且还得和这个锁匹配才行. 基于此做一个抽象,其实包含三方面内容: 1) ...

  2. [ Azure - IAM ] Azure 中的基于角色的访问控制 (RBAC) 与基于属性的访问控制 (ABAC)

    在任何公司中,网络用户必须先经过身份验证和授权,然后才能访问可能导致安全漏洞的系统部分.获得授权的过程称为访问控制.在本文中,我将讨论管理系统访问控制的两种主要方法--基于角色的访问控制 (RBAC) ...

  3. Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制

    InfoQ有幸采访了Microsoft执行副总裁Scott Guthrie,请他谈了谈Azure以及他最近的Red Shirt Dev Tours(红杉开发之旅)[译注1].昨天我们谈到了Azure提 ...

  4. 针对访问控制列表ACL 与 基于角色的访问控制RBAC进行简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> 访问控制列表(Access Control List,ACL) ACL是最早也是最基本的一种访问控制机制,它的原理非常简单:每 ...

  5. RBAC 基于角色的访问控制

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  6. 基于角色的访问控制模型(RBAC)——学习笔记

    基于角色的访问控制模型(RBAC),英文全称Role-Base Access Control,是20世纪90年代推出的一种访问控制模型,模型通过角色(Role)将用户(User)和访问许可(Permi ...

  7. k8s、ServiceAccount权限详解、RBAC 详解(基于角色的访问控制),常用操作指令

    文章目录 Service Account应用示例 RBAC 详解(基于角色的访问控制) 创建一个角色(role)---权限 实验二 常用操作指令 Service Account应用示例 概念图权限关系 ...

  8. RBAC(基于角色的访问控制权限的基本模型)

    (一)基本概念 1.定义 RBAC(Role-Based Access Control),也就是所谓的**"基于角色的访问控制权限"**. 2.优势 在RBAC中,用户不再直接与权 ...

  9. .Net Core实战之基于角色的访问控制的设计

    前言 上个月,我写了两篇微服务的文章:<.Net微服务实战之技术架构分层篇>与<.Net微服务实战之技术选型篇>,微服务系列原有三篇,当我憋第三篇的内容时候一直没有灵感,因此先 ...

最新文章

  1. 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
  2. Unicorn 4.6.3 发布,Rack的HTTP服务器
  3. Android判断当前的android设备是否处于联网状态
  4. 【超简单】MySQL存储引擎的选择与配置
  5. libvirt(virsh命令介绍)
  6. 多轮对话之对话管理:Dialog Management
  7. VTK:Utilities之RenderScalarToFloatBuffer
  8. noi.ac #543 商店
  9. JAVA内存模型与线程安全
  10. php版主动推送,织梦php主动推送完整实例(单篇推送版本)
  11. 笔记本电脑键盘切换_2019年最好的2500元以内的笔记本电脑
  12. ORACLE常用监控语句(未完待续)
  13. Layui Ajax请求时加上 load 加载效果
  14. AOP设计与原理(连接点,切入点与代理模式)——Spring AOP(二)
  15. 条件表达式的学习和使用 实例之闰年的判断
  16. 【2022考石开正攵★氵台】思维导图
  17. 怎样批量给pdf文件添加水印?
  18. 微信小程序开发得会议扫码签到系统
  19. git clone加速(实测推荐)
  20. 追踪邮件发送者的地理位置

热门文章

  1. hdu5446——Unknown Treasure
  2. uva 1623——Enter The Dragon
  3. linux创建指定大小的文件
  4. 一条语句判断数x是否2的n次幂.求取二进制1的个数
  5. python 使用requests模块进行 视频文件的下载
  6. shell将命令执行的结果赋值给 变量
  7. String | 263. Ugly Number
  8. HTML如何添加锚点,分享一点面试小经验
  9. 第4章 springboot热部署 4-1 SpringBoot 使用devtools进行热部署
  10. python selenium处理JS只读(12306)