Come assegnare le autorizzazioni ai ruoli a livello di codice?


26

Ho alcune autorizzazioni che vorrei assegnare ad alcuni ruoli a livello di codice per una più facile installazione.

Poiché sto installando il modulo e sto creando sia i permessi che i ruoli, non ho l'ID ruolo, dove voglio impostare i permessi. Finora ho trovato solo modi per assegnare a livello di codice ruoli che richiedono l'ID ruolo.

Mi chiedo se in qualche modo potrei cercare i ruoli con il loro nome (stringa), recuperare l'ID ruolo e quindi assegnare l'autorizzazione. Semplicemente non sembra giusto.


La tabella delle autorizzazioni utilizza l'ID ruolo, non il nome ruolo. È necessario ottenere l'ID ruolo, quindi aggiungere l'autorizzazione utilizzando tale ID. La tabella delle autorizzazioni ha quindi bisogno della stringa per l'autorizzazione e del nome del modulo che la implementa (almeno su Drupal 7); Non sono sicuro che il nome del modulo sia realmente utilizzato in alcun modo.
kiamlaluno

C'è qualcosa di specifico che non capisci sul codice che dovresti usare? Che codice hai usato? Mostrare il tuo codice sarebbe utile; aiuterebbe chi risponde a suggerire ciò che devi fare (es. segnalare ciò che è sbagliato nel tuo codice).
kiamlaluno

Grazie per la risposta. Penso di dover cercare gli ID nel database. Non dovrebbe essere così difficile.
Vogelsang,

Risposte:


1

Il modulo Caratteristiche lo fa abbastanza bene, permettendoti di esportare ruoli e autorizzazioni (e molte altre cose) in un colpo solo:

http://drupal.org/project/features

Ma se vuoi eseguire il roll out del tuo check out API delle autorizzazioni:

http://drupal.org/project/permissions_api


2
Il problema è che non si conosce l'ID ruolo quando si utilizzano le funzionalità perché vengono assegnate quando si installa la funzionalità. Pertanto, è necessario trovare gli ID in qualche modo per assegnare le autorizzazioni. Probabilmente è solo una ricerca nel database.
Vogelsang,

24

Le funzionalità sono piuttosto utili per cose come questa. Tuttavia, se è necessario creare ruoli e aggiungere autorizzazioni a livello di codice, non è necessario scavare da soli nel database.

Quando si crea un nuovo ruolo utente con user_role_save(), aggiornerà l'oggetto passato con il nuovo ID ruolo utente assegnato. Puoi vedere un esempio di questo nella standard_install()funzione nel profilo di installazione 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')));

Questo esempio mostra che è possibile creare un nuovo ruolo utente, quindi accedere alla sua ridproprietà, che è stata compilata da user_role_save(). Mostra anche come aggiungere autorizzazioni a quel ruolo con user_role_grant_permissions(). In questo caso, garantisce al ruolo di "amministratore" tutte le autorizzazioni disponibili.

Se è necessario ottenere l'id di un ruolo utente creato da qualcun altro, è possibile utilizzare user_role_load_by_name()per ottenere l'oggetto per quel ruolo utente. Quindi prendi l'ID con $role->rid.


2
È utile per concedere / revocare più autorizzazioni contemporaneamente: api.drupal.org/api/drupal/modules%21user%21user.module/function/…
Brian Wood,


20

Vorrei aggiungere un esempio di codice più vicino alla domanda originale su come assegnare le autorizzazioni ai ruoli esistenti a livello di codice.

Puoi cercare i ruoli con il loro nome, recuperare l'ID ruolo e quindi assegnare le autorizzazioni come segue (ad esempio in un'implementazione 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);
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.