1、首先我们要在组件里面配置一下 Rbac ,如下所示(common/config/main-local.php或者main.php)。
 'authManager' => [
 'class' => 'yii\rbac\DbManager',
 'itemTable' => 'auth_item',
 'assignmentTable' => 'auth_assignment',
 'itemChildTable' => 'auth_item_child',
  ],
当然,在配置里面也可以设置 默认角色,只是我没写。Rbac 支持两种类,PhpManager 和 DbManager ,这里我使用 DbManager 。
yii migrate --migrationPath=@yii/rbac/migrations/ 运行此命令生成权限数据表
2、配置完毕,下面我们尝试着创建一个 许可 Permiassion,代码如下
  public function createPermission($item)
  {
    $auth = Yii::$app->authManager;
    $createPost = $auth->createPermission($item);
    $createPost->description = '创建了 ' . $item . ' 许可';
    $auth->add($createPost);
  }
3、好的,许可我们就创建完成了,下面我们创建一个 角色吧 roles
public function createRole($item)
  {
    $auth = Yii::$app->authManager;
    $role = $auth->createRole($item);
    $role->description = '创建了 ' . $item . ' 角色';
    $auth->add($role);
  }
4、好的,就是这么简单,不要激动,下面更简单,给角色分配许可,上代码
 static public function createEmpowerment($items)
  {
    $auth = Yii::$app->authManager;
    $parent = $auth->createRole($items['name']);
    $child = $auth->createPermission($items['description']);
    $auth->addChild($parent, $child);
  }
5、好的,分配许可也创建完成了,我操,太尼玛简单了,继续上代码,给角色分配用户
 static public function assign($item)
  {
    $auth = Yii::$app->authManager;
    $reader = $auth->createRole($item['name']);
    $auth->assign($reader, $item['description']);
  }
6、好的好的,就是这么简单,我自己都他妈不敢相信啊,你相信吗???最后一步,验证用户是否有权限
 public function beforeAction($action)
  {
    $action = Yii::$app->controller->action->id;
    if(\Yii::$app->user->can($action)){
      return true;
    }else{
      throw new \yii\web\UnauthorizedHttpException('对不起,您现在还没获此操作的权限');
    }
  }
好了,一口气都他妈写完了,老爽了。当然,可以创建就一定可以修改和删除,修改和删除都是多表关联操作的, Yii也为我写好了方法,当然你也可以自己去写,都是小意思了。
数据库sql文件地址  /vendor/yiisoft/yii2/rbac

来自:http://blog.sina.com.cn/s/blog_88a65c1b0101izml.html

下面介绍一个 yii2.0 的 Rbac 权限设置,闲话少说,直接上代码,的更多相关文章

  1. 下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...

  2. ZH奶酪:LAMP环境中如何重新部署一个Yii2.0 web项目

    使用Yii2.0 framework开发的项目,使用Github进行版本控制,现在要把这个项目部署到一个新的电脑/系统中: (1)安装LAMP (2)在/var/www/html目录下执行 git c ...

  3. yii2.0中Rbac 怎么添加超加管理员

    最笨的是定义常量.具体怎么做?看下面: //定义在控制器声明上面define('BEST_PHPER',serialize(array('admin','admin1')));//设置admin管理员 ...

  4. yii2 rbac权限管理学习笔记

    下面介绍一个 yii2 的 Rbac 权限管理设置,闲话少说,直接上代码, 1.首先我们要在组件里面配置一下 Rbac ,如下所示(common/config/main-local.php或者main ...

  5. yii2.0归档安装方法

    我前几天用composer安装 一直没成功  我就用归档的方法安装了  所以这篇文字只帮助那些用归档方法安装的朋友 Yii是一个高性能的,适用于开发WEB2.0应用的PHP框架. Yii自带了丰富的功 ...

  6. Yii2.0 数据库查询 [ 2.0 版本 ]

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...

  7. Android学习之6.0系统执行时权限设置

    今天讲讲工作中遇见的6.0运行时权限处理问题.起因就是设置版本号更新时,在6.0系统会报错,起因就是6.0动态权限设置,由于在google为了安全考虑,对于一些特定权限会征询客户授权,这当然会大大添加 ...

  8. Centos6.5中 一键安装LNMP 安装Yii2.0 手工配置

    1.一键安装LNMP cd /usr wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz tar zxf lnmp1.-full.tar.gz ...

  9. EasyUI Tabs + Yii2.0实现iframe方式打开页面(解决共用静态文件引入加载的问题)

    在项目实际开发中,有将打开的各个链接页面隔离的需求(防止静态资源起冲突),这个时候常规思路就是使用iframe来实现!但遇到一个比较棘手的问题,当用easyui Tabs打开一个iframe页面时,怎 ...

随机推荐

  1. android开发-获取wifi列表

    近期博主在学frangment框架,因此想着想着就想通过listfragment完毕对wifi列表的获取. 好! 如今就不说废话了. 一.wifi的基础知识 在Android的官方文档中定义了例如以下 ...

  2. Hadoop读书笔记(一)Hadoop介绍

    1.Hadoop是什么? 适合大数据的分布式与计算平台. HDFS:Hadoop Distributed File System 分布式文件系统  MapReduce:并行计算框架 2.HDFS的架构 ...

  3. wepy小程序实现列表分页上拉加载(2)

    第一篇:wepy小程序实现列表分页上拉加载(1) 本文接着上一篇内容: 4.优化-添加加载动画 (1)首先写加载动画的结构和样式 打开list.wpy文件 template结构代码: <temp ...

  4. [Debug] Chrome Devtools: Elements - Console Integration

    The Element Inspector in Chrome DevTools offers powerful integration with the console - learn how to ...

  5. 超链接a的download属性 实现文件下载功能

    今天做项目遇到一个要点击按钮下载文件的功能. 百度之 知道了a的download属性.这是HTML5的新特性.主要功能是实现下载功能.主要语法是 <a href="url" ...

  6. 6、linux中同步、互斥、阻塞(原子操作、信号量、阻塞)

    1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作.常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0);     //定义原子变量v并初始化为0atomi ...

  7. 50个SQL语句

    一个项目用到的50个SQL语句 转载 说明:下面五十个语句都依照測试数据进行过測试.最好每次仅仅单独执行一个语句. 问题及描写叙述: --1.学生表 Student(Sid,Sname,Sage,Ss ...

  8. Node.js v10.1.0 Documentation

    Modules Stable 在 Node.js 模块系统中,每个文件都会被当做一个独立的模块.假设有一个名为 foo.js: const circle = require('./circle.js' ...

  9. [ES7] Await multi promises sequentially or concurrently

    Somtime 'async await' can have a bad effect on code proferemence. Let's take a look the below exampl ...

  10. 一起talk C栗子吧(第八十三回:C语言实例--进程间通信概述)

    各位看官们,大家好,前二回中咱们说的是进程停止的样例,这一回咱们说的样例是:进程间通信.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们.每一个进程都拥有自己的资源,假设不同进程之间须要共享 ...