Динамическая загрузка файлов конфигурации плагина в CakePHP 3

Вопрос: Как загрузить файл конфигурации из каталога плагинов / конфигураций?

Демонстрационный проект: https://github.com/CakePHPKitchen/CakeDC-Users-Permissions-Example

Я использую плагин CakeDC/users, и у него есть файл permissions.php, из которого он загружает разрешения RBAC. Из того, что я могу сказать, он либо загружает файл разрешений по умолчанию, который находится в папке конфигурации пользовательского плагина, либо загружает файл permissions.php из папки app / config.

Теперь для моего каркаса приложения у меня есть куча разрешений в app / config / permissions.php, однако я не хочу изменять этот файл, так как я буду выполнять git pull из репозитория upstream, и я бы хотел избежать конфликтов.

Итак, что я хотел бы сделать, это в загрузочном скелете приложения

я бы хотел

foreach(Plugin::loaded() as $plugin) {

     $path = Plugin::path($plugin) . 'config/permissions.php';

     if(file_exists($path)) {

        Configure::load($path, 'default', true);
     }
}

Но я получаю следующую ошибку....

 Error: The application is trying to load a file from the /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/SharpAgent/config/permissions plugin. 

 Make sure your plugin /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/SharpAgent/config/permissions is in the /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/ directory and was loaded.

Любые идеи о том, как я могу загрузить файл permissions.php из каталога Plugin/config?

1 ответ

Решение

РЕДАКТИРОВАНИЕ: Вы можете загрузить файл permissions.php из плагина, как это происходит сейчас, но измените содержимое permissions.php, чтобы сохранить существующие разрешения, определенные в конфигурации, например:

конфиг / permissions.php

$permissions = [
    // add your app permissions here
    [
        // ...
    ],
];

// there are more permissions in this config key, defined across your plugins
$morePermissions = \Cake\Core\Configure::read('MyPermissions');
$allPerms = array_merge($permissions, $morePermissions);

return ['CakeDC/Auth.permissions' => $allPerms];

Тогда внутри каждого плагина вы можете иметь:

YOUR_PLUGIN / конфигурации /bootstrap.php

$permissions = \Cake\Core\Configure::read('MyPermissions');
$someMorePermissions = [
    [
        // permissions injected into the app from this plugin
    ]
];

$permissions = array_merge((array)$permissions, $someMorePermissions);
\Cake\Core\Configure::write('MyPermissions', $permissions);

Разрешение каждому плагину динамически внедрять / управлять разрешениями в приложении.

Я создал среду c9.io с этим кодом здесь https://ide.c9.io/steinkel/users-35-custom-permissions

Другие вопросы по тегам