erickskrauch / yii2-rbac-migration

为 Yii2 添加 RBAC 迁移方法的特质

0.1.1 2020-06-22 14:25 UTC

This package is auto-updated.

Last update: 2024-09-22 23:40:14 UTC


README

Latest Version on Packagist Software License Total Downloads

这是一个简单而有用的扩展,用于 Yii2 迁移。它允许您在数据库迁移中直接执行角色和权限的操作。如果您在应用程序中分配角色和权限,而不是在生成 RBAC 期间分配,这可能很有用。

扩展允许您创建、更新和删除角色、权限和规则,并包含用于轻松创建角色的有用构建器。

警告:如果您使用常量作为角色、权限或规则的名称,请不要在迁移类中使用它!使用带有其名称的简单字符串。应用程序开发期间常量值可能会更改,但您旧的迁移应该保持持久。

安装

通过 Composer

$ composer require erickskrauch/yii2-rbac-migration

使用方法

首先,我们必须 使用特质。您可以在迁移文件中这样做

<?php

class m160705_120827_init extends \yii\db\Migration
{
    use \ErickSkrauch\Yii2\RbacMigrateTrait;

    public function safeUp()
    {
        $this->createPermission('upload_data');
    }

    public function safeDown()
    {
        $this->removePermission('upload_data');
    }

    protected function getAuthManager()
    {
        return Yii::$app->authManager;
    }
}

但这有些不舒服,因为每次您都必须实现一个 getAuthManager() 方法。

因此,更方便的方法是创建自己的基本迁移类,该类已经使用此特质并实现了所需的方法。对于 Yii2 高级模板,可以通过创建 \console\models\Migration 类并包含以下内容来完成

<?php
namespace console\models;

use ErickSkrauch\Yii2\RbacMigrateTrait;
use yii\db\Migration as YiiMigration;

class Migration extends YiiMigration
{
    use RbacMigrateTrait;

    protected function getAuthManager()
    {
        return \Yii::$app->authManager;
    }
}

...并从新创建的迁移类扩展

<?php

use console\models\Migration;

class m160705_120827_init extends Migration
{
    public function safeUp()
    {
        $this->createPermission('upload_data');
    }

    public function safeDown()
    {
        $this->removePermission('upload_data');
    }
}

在追求完美时,您可以覆盖控制台应用程序配置中的迁移路径到您自己的模板文件,该文件将立即包含必要的基类。

将来,您可以使用以下方法

// Init db structure, create few permissions and one role and assing permissions to that role
public function safeUp()
{
    $this->initRbacStructure();
    $this->createPermission('view_invoices');
    $this->createPermission('data_analysis');
    $this->createPermission('upload_data');
    $this->createRole('accountant')
         ->addPermission('view_invoices')
         ->addPermission('data_analysis')
         ->addPermission('upload_data');
}

public function safeDown()
{
    $this->removePermission('view_invoices');
    $this->removePermission('data_analysis');
    $this->removePermission('upload_data');
    $this->removeRole('accountant');
    $this->rollbackRbacStructure();
}

可用方法

RbacMigrateTrait

createPermission($name, $description = null, $ruleName = null): ItemBuilder

创建新的权限,将其添加到认证管理器并返回 ItemBuilder 对象。

createRole($name, $description = null): ItemBuilder

创建新的角色,将其添加到认证管理器并返回 ItemBuilder 对象。

addRule($className, $name): void

向认证管理器添加新的规则。如果根据提供的 $className 不再存在类,则将创建并添加到认证管理器,因此如果您更改或删除原始规则,则旧迁移不会失败。

updatePermission($oldName, $newName, $newDescription = false, $newRule = false): void

此方法允许您更改现有权限的签名。如果 $newDescription 传递为 (bool)false,则不会更改描述。$newRule 的行为相同。

updateRole($oldName, $newName, $newDescription = false): void

此方法允许您更改现有角色的签名。如果 $newDescription 传递为 (bool)false,则不会更改描述。

removePermission($name): void

通过传递的名称删除权限。

removeRole($name): void

通过传递的名称删除角色。

removeRule($name): void

从认证管理器中删除规则。如果根据提供的 $name 不再存在类,则将创建并从认证管理器中删除,因此如果您更改或删除原始规则,则旧迁移不会失败。

getRole($role): ItemBuilder

为传递的角色名称返回 ItemBuilder 对象。

getPermission($permission): ItemBuilder

为传递的权限名称返回 ItemBuilder 对象。

initRbacStructure(): void

初始化 RBAC 结构。这是从控制台执行 yii migrate --migrationPath=@yii/rbac/migrations/ 的替代方法。

rollbackRbacStructure(): void

调用 RBAC 迁移的向下方法。这是从控制台执行 yii migrate/down --migrationPath=@yii/rbac/migrations/ 的替代方法。

ItemBuilder

addPermission($permission): ItemBuilder

通过传递权限对象或其名称添加子权限。将返回 $this

addRole($role): ItemBuilder

通过传递角色对象或其名称添加子角色。将返回 $this

removePermission($permission): ItemBuilder

通过传递权限对象或其名称移除子权限。将返回 $this

removeRole($role): ItemBuilder

通过传递角色对象或其名称移除子角色。将返回 $this

变更日志

在发布 1.0.0 版本之前,仅保证补丁版本向后兼容。次要更新可能包括破坏性更改,因此更新次要版本时请检查 CHANGELOG

测试

目前我还没有想出如何测试它以及是否应该测试。如果您有任何想法,欢迎贡献。

贡献

请参阅 CONTRIBUTING 了解详细信息。

鸣谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件