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.