yii rbac 基础操作

来源:互联网 发布:键盘输入记录软件 编辑:程序博客网 时间:2024/06/06 21:03

今天我给大家带来一种 yii 框架 自带 rbac的基础操作 如果写的不好请及时提出,一起解决,谢谢!!

yii 框架 rbac 基础操作

第一步 : 先建表

DbManager


1.yii config文件配置(我用的高级模板)(配置在common/config/main-local.php或者main.php)


'authManager' => [
 'class' => 'yii\rbac\DbManager',
 'itemTable' => 'auth_item',
 'assignmentTable' => 'auth_assignment',
 'itemChildTable' => 'auth_item_child',
  ],
2.当然,在配置里面也可以设置 默认角色,只是我没写。Rbac 支持两种类,PhpManager 和 DbManager ,这里我先 DbManager 。

运行的时候 , 记住在 yii 框架根目录,用 cmd 操作

yii migrate(运行这个命令,生成user表)

yii migrate --migrationPath=@yii/rbac/migrations/




也可以 在 我们 的 yii框架里找到 它是如何 运行的 

大家请看:



上面的图 明显的 说明了,yii 框架 里 有他已经设计好的 sql 我们去运行就好了,很方便,很好

安装表后我们来简单的去测试下:

我们 可以 用DbManager 这个的意思就是 操作数据库 进行 实现rbac'

也可以 使用PhpManager ,其意思是自动创建缓存文件,提供我们 来使用

我先来说 PhpManager 操作

第一步 也就是上面的第一步在 config 里配置 操作为DbManager 


第二步 在我们的后台里 新建 一个rbac 一会里面会自动生成 一两个文件

如图所示



来说以下我们的控制器

先简单的创几个:

<?php

namespace backend\controllers;
use yii\web\Controller;
class PostController extends Controller
{
    public function actionAdd()
    {
        return $this->renderContent('添加');
    }
    public function actionDelete()
    {
        return $this->renderContent('删除');
    }
    public function actionUpdate()
    {
        return $this->renderContent('更新');
    }
    public function actionSelect()
    {
        return $this->renderContent('查询');
    }
}

在创建一个rbac 控制器 进行 添加 角色 等等 操作

authManager授权管理(动态的授权管理)

动态管理权限, 其实就是将用权限分配和校验, 都是使用PHP代码完成, 在程序运行时完成, 需要的方法如下

$auth = \Yii::$app->authMananger;

$auth->createPermission(), 创建权限对象

$auth->createRole(), 创建角色对象

$auth->add(), 添加角色或者权限或者规则

$auth->addChild(), 为角色赋予权限, 添加子权限

$auth->assign(), 为用户分配角色

$auth->remove(), 删除某个授权数据

$auth->removeAll(), 删除全部授权数据包括, 角色, 权限, 规则

\Yii::$app->user->can(‘权限’))检测用户是否具有某权限


以上代码一旦运行, 就会生成权限文件和权限分配文件如下:

权限文件:items.php

角色分配文件:assignments.php

 

大家可以看到, 这个角色分配文件, 与我们之前的一致.

在此基础上, 增加了权限记录文件items.php 这个文件记录下来了那个角色有哪些权限, 这样就不需要再使用ACF进行权限与动作的对应了.

注意, 在yii的RBAC系统中, 可以将角色视为权限的集合, 因此 才会有代码:

将权限设置为角色的子对象, 和将角色设置为角色的自对象. 可以理解成权限的集合, 和集合的合并(继承)操作.

有了以上的代码,  就有能力去动态的设置角色的权限了. 可以在后台增加一个权限管理界面,  完成角色的权限分配了.

权限的校验(动态校验)

当使用了动态授权管理后, 通常就不去使用ACF管理权限了.

就可以使用user组件提供的can()方法来检测当前用户是否具有某个权限了. 在某个具体的动作中, 使用方法: $user->can(‘postAdd’) 就可以知道是否具有操作postAdd的权限, 示例代码如下:

每一个方法里都要写判断是不是很麻烦

我给大家 封装一下

公共的:

    public function beforeAction ($action){
        $user = \Yii::$app->user;        
        $name=ucfirst($action->id);
        if (! $user->can($name)) {
            echo $this->renderContent('没有权限执行该操作');die;
        }
        return true;       
    }

如上所示 -----/

我们大家放到自己喜欢的位置 ,前提 是  公用  方便

数据库操作的也一样 大家大胆去尝试。会成功的,加油!

谢谢大家的细心观看,如果有错误,请提出,及时改正,谢谢!!委屈