网上搜了一大堆yii2.0权限系统,大抵都是千篇一律,而且基本上都是DbManager
看了半天官方文档之后,终于知道了PhpManager的方式下,是怎么引入权限系统。
介绍下我自己的使用。
首先,配置项:在配置文件中

'components' => [
  'authManager' => [
  'class' => 'yii\rbac\PhpManager',
  ],
]

使用authManager,通过$auth = Yii::$app->authManager;获得authManager句柄。
下面就是定义权限。三个名词:权限,角色,用户。

权限:说白了就是一个或者一组操作

$site_info = $auth->createPermission('site/delete');//新建一个权限,这个名字是你随便写的,但是在后面的beforeAction中会用到
$auth->add($site_info);//将权限写入,也就是写入配置文件中@web/rabc/items.php。

角色:说白了就是一个或者一组操作的集合,这些操作都可以调用

$role=$auth->createRole("Teachers");//新建一个角色
$auth->add($role);//将角色写入,也是写到配置文件中@web/rabc/items.php
$auth->addChild($role,$site_info);//将权限分配给角色,

用户:即浏览器的访问者

$auth->assign($role,Yii::$app->user->getId());//将角色分配给用户,用户是通过id识别,一般权限系统都是登录之后的,所以用id识别也可以,这个配置是写到@web/rabc/assignments.php

然后就是对定义好的权限的验证。PhpManager的方式,在验证权限的时候一般与beforeAction()配合使用,beforeAction在其他action执行之前,会自动调用,注意,只是在action开头的操作执行之前会调用。

public function beforeAction($action)
{
  $action = Yii::$app->controller->id.'/'.Yii::$app->controller->action->id;//这里的$action与前面定义的权限名应该一样。   if($action=='site/login' || $action=='site/regist' || $action=='site/error'){
    return true;
  }
  if(\Yii::$app->user->can($action)){//验证用户的权限,这里是需要角色分配给用户的,只有将id关联到了用户才可以验证的。
    return true;
  }else{
    echo"<script>alert('对不起,您现在还没获此操作的权限')</script>";
  }
}

这个验证写的不是很好,可以再else中抛出异常,或者是一些其他对没有权限的处理。
参数$action,必须带上,亲试。函数里面的局部变量$action是你定义的权限名,\Yii::$app->user->can($action)是根据user的id字段来验证用户是否有这个权限。

1.使用PhpManager的方式,权限的一些配置项都在@web/rbac/下,Linux系统下确保你在该目录有写权限。
2.@web/rbac/items.php保存的是角色以及权限的一些相关配置,@web/rbac/assignments.php保存的是角色分配给用户。完全可以不用框架提供的权限定义方式,自己手动在配置文件中定义
3.网上提到的默认角色,按照网上提的方法试过,没用,可能是我没有找到正确的方式吧。
4.权限分配给角色部分,由于是关联到id的,所以可能系统只有一张user表,user表中有个type字段来区分不同的用户,在添加用户的时候,就根据不同的type,将id分配给角色。

Yii2.0权限系统,使用PhpManager的方式的更多相关文章

  1. yii2.0权限控制 ACF权限

    ACF是一种通过yii\filters\AccessControl类来实现的简单授权 有两种角色 ?:未经认证的游客用户 @:已认证的用户 ACF可同过对角色设置权限控制访问 1)记得引入yii\fi ...

  2. yii2.0验证码的两种实现方式

    第一种方式:采用model 1. 模型:Code.php <?phpnamespace app\models; use yii\base\Model;class Code extends Mod ...

  3. Ubuntu14.0.4系统如何获取root权限

    Ubuntu14.0.4系统如何获取root权限 | 浏览:9684 | 更新:2014-08-21 10:38 7 分步阅读 本文主要讲解如何简单实用命令获取root权限 工具/原料 Ubuntu1 ...

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

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

  5. 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 ...

  6. 【Yii系列】Yii2.0基础框架

    缘起 因为一个月的短暂停留,我在给朋友搞事情,所以Yii系列的文章耽搁了很长时间,现在又重拾当时的知识,给大伙好好撸下这一系列的博客 提起Yii,虽然是国外的开发者搞的,但是它的作者是华人,这才是让我 ...

  7. yii2.0 干货

    Yii2 干货集,欢迎提交 Pull Requests.(提交过来的开源项目最好是你用过的,并且觉得好用的) Docs 文档 Yii Framework 2.0 类参考手册 Yii Framework ...

  8. Yii2.0

    Yii2.0基础框架   缘起 因为一个月的短暂停留,我在给朋友搞事情,所以Yii系列的文章耽搁了很长时间,现在又重拾当时的知识,给大伙好好撸下这一系列的博客 提起Yii,虽然是国外的开发者搞的,但是 ...

  9. Yii2.0基础框架

    前言:最近在用php写一个项目的接口,所以需要学习一下Yii的框架,也在这里记录一下. 整体结构 ssets文件夹:assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问p ...

随机推荐

  1. ES BM25 TF-IDF相似度算法设置——

    Pluggable Similarity Algorithms Before we move on from relevance and scoring, we will finish this ch ...

  2. struts2的结果类型

    1.从struts-default.xml入手,得到结果类型列表以及对应的处理类: <result-types> <!-- 转发到action --> <result-t ...

  3. LinkedList_1.打印两个有序链表的公共部分

    思路: 实例化出两个链表($link_a, $link_b),比较连个链表当前元素的大小,谁小谁执行next()方法继续比较,当出现相当的时候把相等的值塞入数组$common里,当两个链表有一个元素比 ...

  4. ISO文件怎么安装

    iso是光盘映像文件,打开iso文件有几种方法:1.使用光盘映像工具软件或者虚拟光驱才能打开iso文件.像软碟通(UItraISO)就是一个很好的光盘映像工具软件,使用它就可以打开iso文件,提取里面 ...

  5. codewar代码练习1——8级晋升7级

    最近发现一个不错的代码练习网站codewar(http://www.codewars.com).注册了一个账号,花了几天的茶余饭后时间做题,把等级从8级升到了7级.本文的目的主要介绍使用感受及相应题目 ...

  6. Sed在匹配行前后加入一行

    a 追加内容 sed ‘/匹配词/a\要加入的内容’ example.file(将内容追加到匹配的目标行的下一行位置)i 插入内容 sed ‘/匹配词/i\要加入的内容’ example.file 将 ...

  7. java面试题04

    1.就你所熟悉的银行业务面说一下,越详细越好 银行经验:手机银行  网上银行经验  怎么支付  转账  了解基本业务 2.了解工作流的控制,审批流程以及帐务处理么? java中怎么实现工作流.审批流程 ...

  8. 洛谷 P2285 [HNOI2004]打鼹鼠

    题目描述 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气. ...

  9. 结合Django+celery二次开发定时周期任务

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  10. 使用Tornado作为Django App的服务器

    闲来无事,折腾折腾. 老是听说tonado是个异步web框架和服务器,作为框架倒是了解到了,但是服务器一直不太懂.所以决定了解一下,既然可以做服务器,那就把自己的django app部署到这上边去. ...