Yii2 使用 RBAC

今天突然想到改写一下公司的权限系统,想到了 rbac 的权限认证系统,就用 yii2 实现了一个例子,具体如下:

由于 yii2 自带 rbac 的实现,所以我只是稍做处理就实现了简单的权限认证

配置

1
2
3
4
5
6
7
8
9
10
11
12
# 如果使用 base 模板的话,打开 config/web.php
# 如果使用 advance 模板的话,打开 common/config/main.php

添加配置

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

建表

实现有两种方式,第一种直接可以用 yii2 自带的命令工具 yii,执行命令

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

第二种方式就是找到 vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql,由于我是用的是 mysql 数据库,所以使用这个文件。
直接将 sql 执行,建立数据表,下来我们就构建测试数据。

构建测试数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 我们假设测试的用户 id 为 1,在自己程序中可以获取当前登录用户 id

$userId = 1;

// 创建用户组
$auth = Yii::$app->authManager;
$role = $auth->createRole("admin");
$role->description = "管理员";
$auth->add($role);

// 创建权限
$auth = Yii::$app->authManager;
$permission = $auth->createPermission("createAritcle");
$permission->description = "创建文章";
$auth->add($data);

// 添加用户到用户组
$auth->assign($role, $userId);

// 给组分配权限
$auth->addChild($role, $permission);


// 测试用户是否具有该组的权限
var_dump($auth->checkAccess($userId, 'createArticle'));

将此代码放到任意的控制器方法中,就可以测试,将看到结果返回 bool 值。

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息

End

坚持原创技术分享,您的支持将鼓励我继续创作!
Flyertutor WeChat Pay

WeChat Pay

Flyertutor Alipay

Alipay