首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
7.1 调用小部件的两种方式
7.1.1 调用widget()方法使用小部件DatePicker
7.1.2 调用begin()和end()方法使用小部件ActiveForm
7.2 项目实现迭代八:使用ActiveForm小部件替换添加文章视图
7.2.1 调用小部件ActiveForm
7.2.2 “文章标题”文本输入框
7.2.3 “文章栏目”下拉列表框
7.2.4 “文章图片”上传文件输入框
7.2.5 “内容”文本输入域
7.3 自定义小部件
7.3.1 继承Widget
7.3.2 自定义小部件的MVC结构
7.4 项目实现迭代九:自定义首页幻灯片小部件
7.5 项目实现迭代十:分页显示列表页
7.5.1 分页组件Pagination
7.5.2 新闻中心列表页实现数据填充
7.5.3 分页的超链接列表小部件LinkPager
8.1 初识资源包类
8.2 Yii2框架资源管理代码分析
8.2.1 视图中注册资源包类
8.2.2 注册资源文件
8.2.3 输出缓冲区的数据
8.3 AssetBundle类的成员属性
8.4 项目实现迭代十一:本书配套项目实现前端资源管理
8.4.1 实现首页前端资源管理
8.4.2 实现新闻中心列表页前端资源管理
9.1 模型中编写验证规则
9.2 控制器中安全赋值
9.3 控制器中触发验证
9.4 视图中提取错误信息
9.5 项目实现迭代十二:完成“添加文章”页面中的模型验证
10.1 AJAX简介
10.2 传统的JavaScript实现AJAX验证
10.2.1 创建AJAX引擎XMLHttpRequest对象
10.2.2 创建HTTP请求
10.2.3 设置响应HTTP请求状态变化的方法
10.2.4 设置获取服务器返回数据的语句
10.2.5 发送HTTP请求
10.3 jQuery实现AJAX验证
10.4 项目实现迭代十三:完成“添加用户”页面的AJAX验证
11.1 用户登录-表单模型
11.2 用户登录-客户端验证
11.2.1 ActiveForm实现客户端验证代码分析
11.2.2 项目实现迭代十四:完成登录页面的客户端验证
11.3 模型中的自定义方法作为rules()验证器
11.4 用于验证用户名和密码的身份类UserIdentity
11.5 项目实现迭代十五:完成用户登录
11.6 保存用户登录状态的yii\web\User类
12.1 访问控制技术综述
12.2 RBAC简介
12.3 RBAC需求分析及功能概述
12.4 项目实现迭代十六:最简方式实现RBAC
12.4.1 数据库设计
12.4.2 用户管理
12.4.3 角色管理
12.4.4 权限管理
12.4.5 用户—角色配置管理
12.4.6 角色—权限配置管理
12.5 项目实现迭代十七:使用yii\rbac\DbManager实现 RBAC
12.5.1 基本概念
12.5.2 用户管理
12.5.3 角色管理
12.5.4 权限管理
12.5.5 权限管理系统验证
12.6 项目实现迭代十八:使用yii2-admin扩展实现RBAC
12.6.1 配置
12.6.2 使用的数据库表
12.6.3 路由列表
12.6.4 角色列表
12.6.5 用户列表
12.6.6 菜单列表
12.6.7 集成AdminLTE后台主题及菜单展示
12.6.8 基于存取控制过滤器(ACF)的用户登录页面
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(中)
小册名称:Yii2框架从入门到精通(中)
### 12.5 项目实现迭代十七:使用`yii\rbac\DbManager`实现 RBAC 在Yii2框架中,基于角色的访问控制(RBAC, Role-Based Access Control)是一种强大的权限管理方法,它允许系统管理员通过分配不同的角色给用户,来控制用户访问特定资源的权限。Yii2提供了`yii\rbac\DbManager`类,这是一个利用数据库来存储角色、权限和规则信息的RBAC组件,非常适合用于复杂应用中的权限管理。本章节将详细介绍如何在Yii2项目中通过`yii\rbac\DbManager`来实现RBAC系统。 #### 1. 准备数据库 首先,你需要准备一个数据库来存储RBAC所需的数据。Yii2提供了`rbac-migration.php`迁移文件,该文件包含了创建RBAC所需数据库表的SQL语句。这个文件通常位于Yii2框架的`vendor/yiisoft/yii2/rbac/migrations`目录下。 1. **运行迁移**:在你的Yii2项目根目录下,通过命令行工具运行以下命令来应用RBAC迁移: ```bash php yii migrate --migrationPath=@yii/rbac/migrations ``` 这将创建以下表:`auth_item`(存储权限和角色)、`auth_item_child`(存储权限与角色的层级关系)、`auth_assignment`(存储用户与角色的关联)、`auth_rule`(存储自定义规则)。 #### 2. 配置`DbManager` 在你的Yii2应用配置文件中(通常是`web.php`或`console.php`),配置`components`数组以使用`yii\rbac\DbManager`作为RBAC管理器: ```php 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], // 其他组件配置... ], ``` #### 3. 定义权限、角色和规则 RBAC系统的核心是权限、角色和规则的定义。你可以通过编程方式在控制器或命令行脚本中创建它们,也可以利用Yii2的迁移系统来管理。 ##### 3.1 权限 权限代表了用户能够执行的具体操作,如“创建文章”、“编辑用户信息”等。使用`authManager`组件的`createPermission`和`add`方法来创建和添加权限: ```php $auth = Yii::$app->authManager; // 创建权限 $createPost = $auth->createPermission('createPost'); $createPost->description = 'Create a post'; $auth->add($createPost); // 添加更多权限... ``` ##### 3.2 角色 角色是一组权限的集合,通常与特定的用户组或职责相关联。使用`createRole`和`add`方法创建角色,并用`addChild`方法将权限分配给角色: ```php $editor = $auth->createRole('editor'); $editor->description = 'Post editor'; $auth->add($editor); // 将权限分配给角色 $auth->addChild($editor, $createPost); // 添加更多角色和权限分配... ``` ##### 3.3 规则 规则是更细粒度的权限控制,它们可以基于特定条件动态决定是否允许访问。Yii2允许你定义自己的规则类,并通过`authManager`的`createRule`和`add`方法添加到系统中。 ```php // 假设有一个自定义规则类 OwnPostRule $rule = new OwnPostRule(); $auth->add($rule); // 创建一个需要规则判断的权限 $updateOwnPost = $auth->createPermission('updateOwnPost'); $updateOwnPost->description = 'Update own post'; $updateOwnPost->ruleName = $rule->name; // 关联规则 $auth->add($updateOwnPost); // 将权限分配给角色,但这次要考虑到规则 $auth->addChild($editor, $updateOwnPost); ``` #### 4. 分配角色给用户 最后一步是将定义好的角色分配给具体的用户。使用`authManager`的`assign`方法实现: ```php // 假设用户ID为1 $userId = 1; $auth->assign($editor, $userId); ``` #### 5. 权限检查 在控制器或视图中,你可以使用`Yii::$app->user->can()`方法来检查当前用户是否拥有某个权限或角色: ```php if (Yii::$app->user->can('createPost')) { // 用户可以创建文章 } if (Yii::$app->user->can('editor')) { // 用户是编辑角色 } ``` #### 6. 进阶使用 - **动态权限和角色**:你可以根据业务需求,在运行时动态地创建、修改和删除权限、角色和规则。 - **权限继承**:Yii2的RBAC系统支持权限的继承,即一个角色可以继承另一个角色的所有权限。 - **权限缓存**:为了提高性能,你可以配置`DbManager`使用缓存来存储角色和权限的查询结果。 #### 7. 总结 通过`yii\rbac\DbManager`实现RBAC系统,Yii2框架为开发者提供了强大的权限管理工具。从定义权限、角色和规则,到分配角色给用户,再到权限检查,Yii2的RBAC系统都提供了灵活且易于使用的API。在实际项目中,合理地运用RBAC系统可以显著提升应用的安全性和可维护性。希望本章节的内容能帮助你更好地理解和应用Yii2的RBAC功能。
上一篇:
12.4.6 角色—权限配置管理
下一篇:
12.5.1 基本概念
该分类下的相关小册推荐:
Magento零基础到架构师(内容设计)
PHP合辑1-基础入门
PHP程序员面试算法宝典
PHP高性能框架-Swoole
Laravel(10.x)从入门到精通(十三)
PHP底层原理及源码分析
Magento零基础到架构师(系统管理)
Laravel(10.x)从入门到精通(三)
PHP高并发秒杀入门与实战
Workerman高性能框架-GatewayWorker
经典设计模式PHP版
Laravel(10.x)从入门到精通(十五)