YII扩展(2)RBAC使用以及根据当前controller和action自动生成数据

2 篇文章 0 订阅
1 篇文章 0 订阅

第一步:在console/main.php里面加入rbac 的配置:

数据库带表前缀的使用如下配置:

'authManager' => [
    'class' => 'yii\rbac\DbManager',
    'itemTable' => '{{%auth_item}}',
    'assignmentTable' => '{{%auth_assignment}}',
    'itemChildTable' => '{{%auth_item_child}}',
    'ruleTable' => '{{%auth_rule}}',
],

不带表前缀使用配置:

'authManager' => [
    'class' => 'yii\rbac\DbManager',
    'itemTable' => 'auth_item',
    'assignmentTable' => 'auth_assignment',
    'itemChildTable' => 'auth_item_child',
    'ruleTable' => 'auth_rule',
],

 

第二步.进入yii网站的根目录在命令行下执行:

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

这样数据库多了四张表,

migration表也生成了对应的记录数据:

 

第三步:如何自动根据当前的controller类和action自动生成数据填充表,这里给大家写了个类

<?php
namespace console\controllers;
use backend\models\Admin;
use yii\console\Controller;
class DataController extends Controller
{
    public function actionInit()
    {
        $auth = \Yii::$app->authManager;
        $db = \Yii::$app->db;
        $connection = $db->createCommand();
        $transaction = $db->beginTransaction();
        try{
            echo "============用户填充【开始】============\n";
            $admin = new Admin();
            $admin->username = 'admin';
            $admin->password_hash = '123456';
            $admin->email = 'root@qq.com';
            $admin->save(false);
            echo '1111111111111111111';
            echo "填充用户名:{$admin['username']}\n";
            echo "============用户填充【完成】============\n";
            echo "\n";

            echo "============权限填充【开始】============\n";
            $controllerPath = 'backend\\controllers\\';
            foreach (scandir($controllerPath) as $fileName){
                if ($fileName!='.' && $fileName!='..'){
                    $content = file_get_contents($controllerPath.$fileName);
                    //取控制器名称
                    if (preg_match('/class (\w+)Controller/',$content,$mach1)){
                        $controller = strtolower($mach1[1]);
                        $connection->insert('{{%auth_item}}',[
                            'name' => $controller.'/*',
                            'type' => 2,
                            'description' => $controller.'/*',
                            'created_at' => time(),
                            'updated_at' => time(),
                        ])->execute();
                        echo "填充权限".$controller."/*\n";
                        //取actions名称
                        if (preg_match_all('/public function action(\w+)\(/',$content,$mach2)){
                            foreach ($mach2[1] as $action){
                                $connection->insert('{{%auth_item}}',[
                                    'name' => $controller.'/'.strtolower($action),
                                    'type' => 2,
                                    'description' => $controller.'/'.strtolower($action),
                                    'created_at' => time(),
                                    'updated_at' => time(),
                                ])->execute();
                                echo "--填充权限".$controller.'/'.strtolower($action)."\n";
                            }
                        }
                    }
                }
            }
            echo "============权限填充【完成】============\n";
            echo "\n";

            echo "============角色填充【开始】============\n";
            $datas = [
                ['name' => 'root','description'=>'超级管理员'],
                ['name' => 'admin','description'=>'管理员'],
                ['name' => 'tester','description'=>'测试人员'],
                ['name' => 'editor','description'=>'编辑'],
            ];
            foreach ($datas as $data){
                $role = $auth->createRole($data['name']);
                $role->description = $data['description'];
                $auth->add($role);
                echo "填充角色{$data['name']}-{$data['description']}\n";
            }
            echo "============角色填充【完成】============\n";
            echo "\n";

            echo "============授权填充【开始】============\n";
            $role = $auth->getRole('root');
            $permissions = $auth->getPermissions();
            foreach ($permissions as $key=>$item){
                $auth->assign($item,$admin->id);
                echo "为用户:".$admin->username."授权".$item->description."权限\n";
                $auth->addChild($role,$item);
                echo "为角色:".$role->description."授权".$item->description."权限\n";
            }
            $roles = $auth->getRoles();
            foreach ($roles as $key=>$item){
                $auth->assign($item,$admin->id);
                echo "为用户:".$admin->username."授权".$item->description."角色\n";
            }
            echo "============授权填充【完成】============\n";
            echo "\n";

            $transaction->commit();

        }catch (\Exception $exception){
            $transaction->rollBack();
            echo "????????????运行出错????????????\n";
            echo $exception->getMessage();
            echo "\n";
        }
    }
}

放到console里的controller然后在命令行执行如下命令即可:

即可,查看数据库新生成的四张表都填充好了自己当前开发状态下的权限配置

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值