2017-09-03 6 views
0

Question: Comment charger un fichier de configuration à partir d'un répertoire Plugin/config?Chargement dynamique des fichiers de configuration du plugin dans CakePHP 3

Projet de démonstration: https://github.com/CakePHPKitchen/CakeDC-Users-Permissions-Example

J'utilise du plugin CakeDC/utilisateurs et il a un fichier permissions.php qu'il charge les autorisations RBAC à partir. D'après ce que je peux dire, il charge le fichier d'autorisations par défaut qui se trouve dans le dossier config du plugin utilisateur OU il charge le fichier permissions.php du dossier app/config. Maintenant, pour mon squelette d'application, j'ai un tas d'autorisations dans l'app/config/permissions.php, cependant, je ne veux pas modifier ce fichier car je vais faire des pulls git à partir du repo en amont et je voudrais pour éviter les conflits.

Donc ce que je voudrais faire est, dans le squelette d'application bootstrap

Je voudrais

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

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

    if(file_exists($path)) { 

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

Mais je reçois l'erreur suivante ....

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. 

Des idées sur la façon dont je peux charger le fichier permissions.php depuis le répertoire Plugin/config?

Répondre

1

ÉDITÉ: Vous pouvez charger le fichier permissions.php du plug-in comme il le fait maintenant, mais modifier le contenu de permissions.php pour conserver les autorisations existantes définies dans la configuration, par exemple:

config/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]; 

Ensuite, l'intérieur de chaque plugin vous pourriez avoir:

YOUR_PLUGIN/config/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); 

Autoriser chaque plug-in à injecter/gérer dynamiquement des autorisations dans l'application.

J'ai créé un environnement c9.io avec ce code ici https://ide.c9.io/steinkel/users-35-custom-permissions

+0

J'ai créé un projet de démonstration, il a le code recommandé dans l'exemple Plugin bootstrap.php ... https://github.com/CakePHPKitchen/CakeDC-Users-Permissions-Exemple –

+0

Les permissions n'ont pas encore été ajoutées à la config lorsque le bootstrap du plugin se charge, et si je définis les permissions pour le plugin dans le bootstrap, elles seront finalement écrasées ... –

+0

me semble que le fichier permissions.php n'est pas chargé jusqu'à ce que le constructeur de SimpleRbacAuthorize.php dans CakeDC/auth soit viré ... On dirait que pour moi, pour que ce que vous dites fonctionne, il doit être chargé à partir d'un bootstrap de CakeDC/auth ou CakeDC/users –