Yii2 rbac权限控制详解

时间:2024-03-19 10:49:07

首先本文所讲的权限控制有2种,一种是在数据库里建表,另一种是在框架里写文件,DbManager,PhpManager

第一种

我们先来讲第一种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',
  ],

Yii2 rbac权限控制详解

Yii2 rbac权限控制详解

2.然后windows+r 输入cmd命令 在您项目的根目录下输入

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

Yii2 rbac权限控制详解

yii migrate [email protected]/rbac/migrations/ 运行此命令生成权限数据表

Yii2 rbac权限控制详解

生成的表如下图

Yii2 rbac权限控制详解

3.创建好表后接开始写代码了

<?php


namespace backend\controllers;
use Yii;
use yii\web\Controller;
use yii\filters\AccessControl;
class RbacController extends Controller
{

//判断有没有权限
    public function beforeAction($action){
        $name=$action->id;//获取方法名
        $name=ucfirst($name);//首字母大写(因为我下面定义的方法首字母是大写,没有这一步会报错,您也可以把方法写成小写的,就没有这一步了)
        $user = \Yii::$app->user;//获取用户登录得信息
        if (! $user->can($name)) {
            echo $this->renderContent('没有权限执行该操作');die;
        }else{
            return true;
        }


    }


    public function actionAdd()
    {
        return $this->renderContent('添加');
    }
    public function actionDelete()
    {
        return $this->renderContent('删除');
    }
    public function actionUpdate()
    {
        return $this->renderContent('更新');
    }
    public function actionSelect()
    {
        return $this->renderContent('查询');
    }


//写 一个方法
    public function actionAuth()
{      
          // 获取authMananger组件对象
        $auth = \Yii::$app->authManager;
        // 增加角色
       $wpf = $auth->createRole('管理员');
       $auth->add($wpf);
        


        //用户添加角色
        $auth->assign($wpf,1);


        // 增加权限
        $postAdd = $auth->createPermission('Add');
        $postAdd->description = '文章添加';
        $auth->add($postAdd);
        $postDelete = $auth->createPermission('Delete');
        $postDelete->description = '文章删除';
        $auth->add($postDelete);
        $postUpdate = $auth->createPermission('Update');
        $postUpdate->description = '文章编辑';
        $auth->add($postUpdate);
        $postSelect = $auth->createPermission('Select');
        $postSelect->description = '文章查看';
        $auth->add($postSelect);
 
 
        // 为角色赋予权限
        $auth->addChild($wpf, $postAdd);// 作者 添加文章
        $auth->addChild($wpf, $postUpdate);// 作者 编辑文章
        
 
     
}


   
}

写完之后用户只有添加和修改的权限,删除和查看没有权限


第二种

讲的方法是PhpManager

和上面配置的差不多

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

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


Yii2 rbac权限控制详解

 
然后在后台建一个rabc的文件夹运行上面写的php代码就会自动生成rbac里的两个文件

Yii2 rbac权限控制详解

这是角色文件,如下图     
Yii2 rbac权限控制详解

这是权限文件和角色所拥有的权限

Yii2 rbac权限控制详解


   最后去界面检测用户是否有权限,这就是yii2简单的rabc权限控制,是不是很简单呀!!!