运行 作为常规应用程序迁移的一部分的初始 RBAC 迁移

Run initial RBAC migrations as part of a regular app migration

我正在构建一个基于 Yii2 高级模板的产品。

作为该产品及其未来部署的一部分,我正在尝试在常规 Yii2 迁移中自动创建与授权相关的表。

例如,当最终用户安装产品并运行常规的 Yii 迁移命令时,他应该拥有功能齐全的用户管理和授权。

为了授权工作,Yii2 RBAC documentation page 指出需要 4 个表 (auth_*)。文档指出它们是由 运行 以下迁移创建的:

yii migrate --migrationPath=@yii/rbac/migrations

我想通过 运行 在将存储在 common/migrations.

中的常规迁移中为他提供的特定迁移代码来抵消最终用户带来的额外麻烦

有什么简单的解决方法吗?

我创建了一个 migrate.sh 文件,我在其中放置了我需要 运行 的迁移命令。这使我可以同时从多个地方迁移。很简单,看这里:https://github.com/Mihai-P/yii2-app-advanced/blob/master/migrate.sh

而不是 运行ning ./yii migrate/up 我只是 运行 sh migrate.sh 它将从任何地方更新所有内容。

真正的要点是:你不必严格遵守 Yii 给你的东西。那只是供您构建的模板。分叉它,修改它,让它成为你自己的。

尝试在console/config/main中添加。php:

'controllerMap' => [
        'migrate' => [
            'class' => 'yii\console\controllers\MigrateController',
            'migrationPath' => [
                '@console/migrations',               
                '@yii/rbac/migrations',
            ]
        ]
    ],

另一种方法(不使用 *.sh 文件)是将 rbac_init 迁移复制到您的迁移文件夹:

cp vendor/yiisoft/yii2/rbac/migrations/m???????_rbac_init.php console/migrations/

现在,当您 运行 php yii migrate 时,它将包含在 rbac_init 迁移中。

我知道这是一个很老的问题,但这里有一个简单的解决方案,创建迁移文件并在该文件中包含此代码

<?php
require(Yii::getAlias('@yii/rbac/migrations/m140506_102106_rbac_init.php'));

/**
 * Class m220225_133725_init_rbac
 */
class m220225_133725_init_rbac extends m140506_102106_rbac_init
{

}