justcoded / yii2-rbac
Yii2 RBAC 模块
Requires
- php: >=7.0.0
- kartik-v/yii2-widget-select2: ^2.1.0
- yiisoft/yii2: ^2.0.12
README
Yii 2 JustCoded RBAC 扩展
基于路由的访问扩展 RBAC 管理器。
特性
预定义角色和权限
默认情况下,此扩展初始化以下角色和权限
权限
- * - 权限。所有其他权限的父级
- administer - 您可以使用它来检查访问管理员面板的权限
角色
- 访客 - 未认证的用户
- 认证用户 - 认证用户(您需要自行添加用户)
- 管理员 - 拥有
administer
权限,因此可以访问管理员面板 - 超级用户 - 拥有
*
权限,可以访问所有内容
路由扫描器
特殊的控制台命令(或 GUI 界面)具有扫描您的项目文件并导入以下权限的功能
- {controller->uniqueId}/*
- {controller->uniqueId}/{action->id}
您可以创建额外的角色(或将权限添加到现有角色),以配置您的系统高级访问。
路由访问过滤器
在 RBAC 配置中,最常见的事情是关闭对网站某些部分(登录区域、不同用户角色、管理员区域等)的访问。
扩展提供类似于标准 AccessControl 的过滤器,它在页面加载时检查 {controller->uniqueId}/*
,{controller->uniqueId}/{action->id}
权限,如果您无权访问路由,则抛出 403 错误。
GUI
简单的 GUI* 界面来管理您的角色和权限。
注意: GUI 仍具有 alpha 版本功能。不要将此 GUI 的访问权限分享给您的客户!
安装
安装此扩展的最佳方式是通过 composer。
运行以下命令之一:
php composer.phar require --prefer-dist justcoded/yii2-rbac "*"
或将其添加到您的 composer.json 文件的 require 部分:
"justcoded/yii2-rbac": "*"
配置
组件设置
要使用 RBAC 扩展,您需要在应用程序配置中配置组件数组
'modules' => [ ... 'rbac' => [ 'class' => 'justcoded\yii2\rbac\Module' ], ... ], 'components' => [ ... 'authManager' => [ 'class' => 'justcoded\yii2\rbac\components\DbManager', //'class' => 'justcoded\yii2\rbac\components\PhpManager', ], ... ],
Bootstrap4 主题支持
默认情况下,所有视图都使用标准的 yii2-bootstrap 包和 Bootstrap v3。如果您使用现代 Bootstrap 4,则可以覆盖一些类以使用 yii2-bootstrap4 包。在您的配置中,您需要重新配置容器依赖项,如下所示
'container' => [ 'definitions' => [ // you can create your own GrivView to customize all options for main roles and permissions lists. 'justcoded\yii2\rbac\widgets\RbacGridView' => [ 'class' => \app\modules\admin\widgets\RbacGridView::class, ], // this will replace bootstrap3 ActiveForm with bootstrap4 ActiveForm. 'justcoded\yii2\rbac\widgets\RbacActiveForm' => [ 'class' => \yii\bootstrap4\ActiveForm::class, ], ], ],
- 注意:您需要手动在您的
composer.json
中添加yiisoft/yii2-bootstrap4
包依赖项。
基本 RBAC 配置
请按照 官方文档 配置 RBAC 存储(创建必要的文件或数据库表)。
如果您使用 DbManager,则可以使用以下迁移命令初始化数据库表
yii migrate --migrationPath=@yii/rbac/migrations
初始化基本角色
在开始使用此扩展之前,您需要初始化预定义为其的默认角色。
为此,您需要运行几个命令
# init base roles and administer/master permission php yii rbac/init # assign master role to some user (in this case user with ID = 1) php yii rbac/assign-master 1 # scan your application routes php yii rbac/scan # ADVANCED TEMPLATE ONLY: scan routes for rbac module. php yii rbac/scan -p='@vendor/justcoded/yii2-rbac' -b='rbac/' # BASIC TEMPLATE ONLY: in case you use 'admin' module for backend: php yii rbac/scan -p='@vendor/justcoded/yii2-rbac' -b='admin/rbac/'
使用方法
GUI 界面
要使用图形界面,只需按照您在扫描路由/配置模块时指定的基本路由即可。
注意:角色权限选择器是一个热补丁解决方案,因此当您在框之间移动项目时,它不会显示正确的树结构。这将在下一个版本中修复。
路由访问过滤器
RouteAccessControl 过滤器可以用于特定的控制器(或全局)内部,以在非常高的级别上控制对控制器操作的访问。
路由扫描器插入以下权限
{controller->uniqueId}/* {controller->uniqueId}/{action->id}
在控制器beforeAction方法中,这个过滤器会检查当前登录用户是否有权限访问这些路由。
要在某个特定的控制器中启用过滤器
public function actions() { return [ 'routeAccess' => [ 'class' => 'justcoded\yii2\rbac\filters\RouteAccessControl', ], ]; }
或者您可以在全局配置这个过滤器。在您当前应用程序的配置中,只需添加如下部分
'as routeAccess' => [ 'class' => 'justcoded\yii2\rbac\filters\RouteAccessControl', 'allowActions' => [ 'site/*', ], 'allowRegexp' => '/(gii)/i', // optional ],
示例
您可以在我们的Yii2 快速启动套件上查看示例。