web-dev-qa-db-fra.com

Comment attribuer des autorisations aux rôles par programme?

J'ai des autorisations que j'aimerais attribuer à certains rôles par programmation pour une installation plus facile.

Parce que j'installe le module et que je crée à la fois des autorisations et des rôles, je n'ai pas d'ID de rôle, où je veux définir les autorisations. Jusqu'à présent, je n'ai trouvé que des moyens pour attribuer des rôles par programme qui ont besoin de l'ID de rôle.

Je me demande si je pourrais d'une manière ou d'une autre rechercher les rôles avec leur nom (chaîne), récupérer l'ID de rôle puis attribuer l'autorisation. Cela ne me semble pas juste.

25
vogelsang

Le module Fonctionnalités le fait très bien, vous permettant d'exporter des rôles et des autorisations (et beaucoup d'autres choses) d'un seul coup:

http://drupal.org/project/features

Mais si vous souhaitez lancer votre propre API d'autorisation d'extraction:

http://drupal.org/project/permissions_api

1
krlucas

Les fonctionnalités sont assez pratiques pour des trucs comme ça. Cependant, si vous devez créer des rôles et ajouter des autorisations par programme, vous n'avez pas besoin de fouiller dans la base de données par vous-même.

Lorsque vous créez un nouveau rôle d'utilisateur avec user_role_save() , il met à jour l'objet que vous avez transmis avec le nouvel ID de rôle d'utilisateur qui a été attribué. Vous pouvez voir un exemple de cela dans la fonction standard_install() du profil d'installation standard.

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

Cet exemple montre que vous pouvez créer un nouveau rôle utilisateur, puis accéder à sa propriété rid, qui a été remplie par user_role_save(). Il montre également comment ajouter des autorisations à ce rôle avec user_role_grant_permissions(). Dans ce cas, il accorde au rôle "administrateur" toutes les autorisations disponibles.

Si vous devez obtenir l'ID d'un rôle d'utilisateur créé par quelqu'un d'autre, vous pouvez utiliser user_role_load_by_name() pour obtenir l'objet pour ce rôle d'utilisateur. Ensuite, il vous suffit de saisir l'identifiant avec $role->rid.

25
Chaulky

Je voudrais ajouter un exemple de code plus proche de la question d'origine sur la façon d'attribuer des autorisations aux rôles existants par programme.

Vous pouvez rechercher les rôles avec leur nom, récupérer l'ID de rôle, puis attribuer les autorisations comme suit (par exemple dans une implémentation hook_update):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
20
batigolix