davidxu/yii2-srbac

使用authManager的简单RBAC管理器,其数据库管理器为DbManager

安装: 11

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分支: 33

类型:yii2-extension

v2.1.7 2024-04-18 14:04 UTC

This package is auto-updated.

Last update: 2024-09-18 15:05:05 UTC


README

这是为Yii 2.0设计的简单RBAC管理器。它基于具有出色功能的yii2-admin扩展进行精简

Latest Stable Version Total Downloads Latest Unstable Version License

注意

在安装和使用此扩展之前,请确保您的应用程序已经使用了数据库登录认证。特别是对于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),
          ...
        ]
    ]
]);

如何贡献

这是一个开源项目,因此您的贡献非常受欢迎。

要开始贡献

  • 在本地安装此项目(阅读安装部分)
  • 克隆此存储库。
  • 查看README.md
  • 发送拉取请求

除了通过拉取请求进行贡献外,您还可以提交问题