erickskrauch / yii2-rbac-migration
为 Yii2 添加 RBAC 迁移方法的特质
Requires
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-09-22 23:40:14 UTC
README
这是一个简单而有用的扩展,用于 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)。有关更多信息,请参阅 许可文件。