davidxu / yii2-srbac
使用authManager的简单RBAC管理器,其数据库管理器为DbManager
Requires
- php: >=8.0
- davidxu/yii2-admin-config: >=1.0.6
- davidxu/yii2-treegrid: ^1.0.2
- kartik-v/yii2-widget-select2: ^v2.2.4
- yiisoft/yii2: *
README
这是为Yii 2.0设计的简单RBAC管理器。它基于具有出色功能的yii2-admin扩展进行精简
注意
在安装和使用此扩展之前,请确保您的应用程序已经使用了数据库登录认证。特别是对于yii基本模板。因为没有它,此扩展将产生错误并变得无用。
安装
安装此扩展的最佳方式是通过composer。
运行以下命令:
php composer.phar require --prefer-dist davidxu/yii2-srbac "^2.0"
或添加以下内容:
"davidxu/yii2-srbac": "^2.0"
或添加此内容以安装最新更改:
"davidxu/yii2-srbac": "^2.0"
将以下内容添加到您的composer.json
文件的require部分。
配置
扩展安装后,只需在代码中简单使用即可:
在配置中
'as access' => [ 'class' => '\davidxu\srbac\components\AccessFilter', 'allowActions' => [ // add wildcard allowed action here! 'site/*', 'debug/*', 'srbac/*', // only in dev mode ], ], ..., 'modules' => [ 'srbac' => [ 'class' => '\davidxu\srbac\SrbacModule', ], ... ], 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', // only support DbManager ], ],
因为此扩展使用'yii\rbac\DbManager'作为认证管理器,所以您应该首先迁移rbac sql
yii migrate --migrationPath=@yii/rbac/migrations
如果您使用的是Yii 2.0.6版本或更高版本,那么迁移此扩展的自定义表
yii migrate --migrationPath=@davidxu/srbac/migrations
但如果您安装的是Yii 2.0.5版本或更早版本,那么迁移此扩展的自定义表
yii migrate --migrationPath=@davidxu/srbac/migrations/old
使用方法
此RBAC管理器有三个主要页面,它们是
路由
从应用程序获取所有动作路由。在这里,您可以打开/关闭权限,以便在菜单角色中不显示,重命名动作路由的别名/类型,使其易于用户阅读。您可以通过以下URL访问路由
:
https:///path/to/index.php?r=srbac/route
角色
定义用户的访问级别,他是什么超级管理员?员工?收银员?等等。在此菜单中,您可以分配权限/动作路由(应用程序中的操作,例如创建、更新、删除等)到角色。您可以通过以下URL访问角色
:
https:///path/to/index.php?r=srbac/role
用户
用于标准用户管理,创建/更新/删除用户,并将角色分配给用户。您可以通过以下URL访问用户
:
https:///path/to/index.php?r=srbac/user
我们建议您启用美观的URL。
小部件实现
示例动态按钮
用于检查是否有路由访问权限
if ((Srbac::checkRoute($this->context->id.'/create'))){ echo Html::a('Create Note', ['create'], ['class' => 'btn btn-success']); } // in other case maybe You want ensure same of route so You can add parameter strict true if ((Srbac::checkRoute($this->context->id.'/create',true))){
示例动态菜单
用于过滤权限访问菜单
use davidxu\srbac\components\Srbac; $menuItems = [ ['label' => 'Home', 'url' => ['/site/index']], ['label' => 'About', 'url' => ['/site/about']], ['label' => 'Contact', 'url' => ['/site/contact']], ]; if (\Yii::$app->user->isGuest){ $menuItems[] = ['label' => 'Login', 'url' => ['/site/login']]; } else{ $menuItems[] = ['label' => 'App', 'items' => [ ['label' => 'Category', 'url' => ['/category/index']], ['label' => 'Product', 'url' => ['/product/index']], ['label' => 'Cart', 'url' => ['/cart/index']], ]]; $menuItems[] = [ 'label' => 'Logout (' . \Yii::$app->user->identity->username . ')', 'url' => ['/site/logout'], 'linkOptions' => ['data-method' => 'post'] ]; } $menuItems = Srbac::filterMenu($menuItems); // in other case maybe You want ensure same of route so You can add parameter strict true // $menuItems = Srbac::filterMenu($menuItems,true); echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right'], 'items' => $menuItems, ]);
示例动态操作列模板
用于过滤GridView操作列的模板
use davidxu\srbac\components\Srbac; echo GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ..., [ 'class' => 'yii\grid\ActionColumn', 'template' => Srbac::filterActionColumn([ 'update','delete','download' ],$this->context->route), ... ] ] ]);
如何贡献
这是一个开源项目,因此您的贡献非常受欢迎。
要开始贡献
除了通过拉取请求进行贡献外,您还可以提交问题。