Wie kann ich Rollen programmgesteuert Berechtigungen zuweisen?

26

Ich habe einige Berechtigungen, die ich einigen Rollen programmgesteuert zuweisen möchte, um die Installation zu vereinfachen.

Da ich das Modul installiere und sowohl Berechtigungen als auch Rollen erstelle, habe ich nicht die Rollen-IDs, in denen ich die Berechtigungen festlegen möchte. Bisher habe ich nur Möglichkeiten gefunden , Rollen programmgesteuert zuzuweisen , für die die Rollen-ID erforderlich ist.

Ich frage mich, ob ich die Rollen mit ihrem Namen (String) irgendwie nachschlagen, die Rollen-ID abrufen und dann die Berechtigung zuweisen könnte. Es fühlt sich einfach nicht richtig an.

Vogelsang
quelle
In der Berechtigungstabelle wird die Rollen-ID und nicht der Rollenname verwendet. Sie müssen die Rollen-ID abrufen und dann die Berechtigung mithilfe dieser ID hinzufügen. Die Berechtigungstabelle benötigt dann die Zeichenfolge für die Berechtigung und den Namen des Moduls, das sie implementiert (zumindest auf Drupal 7). Ich bin nicht sicher, ob der Modulname wirklich in irgendeiner Weise verwendet wird.
kiamlaluno
Gibt es etwas Spezielles, das Sie über den Code, den Sie verwenden sollten, nicht verstehen? Welchen Code hast du benutzt? Es wäre nützlich, wenn Sie Ihren Code anzeigen würden. Es würde helfen, wer antwortet, um vorzuschlagen, was Sie tun müssen (z. B. zu melden, was in Ihrem Code nicht stimmt).
kiamlaluno
Danke für die Antwort. Ich denke, ich muss die IDs in der Datenbank nachschlagen. Es sollte nicht so schwer sein.
Vogelsang

Antworten:

1

Das Features-Modul macht das ganz gut und ermöglicht es Ihnen, Rollen und Berechtigungen (und viele andere Dinge) auf einen Schlag zu exportieren:

http://drupal.org/project/features

Wenn Sie jedoch Ihre eigene Check-out-Berechtigungs-API erstellen möchten, gehen Sie wie folgt vor:

http://drupal.org/project/permissions_api

krlucas
quelle
2
Das Problem ist, dass Sie die Rollen-ID nicht kennen, wenn Sie Features verwenden, da sie bei der Installation des Features zugewiesen werden. Daher müssen Sie die IDs irgendwie finden, um die Berechtigungen zuzuweisen. Es ist wahrscheinlich nur eine Suche in der Datenbank.
Vogelsang
24

Features sind für solche Dinge ziemlich praktisch. Wenn Sie jedoch Rollen erstellen und programmgesteuert Berechtigungen hinzufügen müssen, müssen Sie die Datenbank nicht selbst durchsuchen.

Wenn Sie eine neue Benutzerrolle mit erstellen user_role_save(), wird das übergebene Objekt mit der neuen Benutzerrollen-ID aktualisiert, die zugewiesen wurde. Ein Beispiel hierfür finden Sie in der standard_install()Funktion im Standard-Installationsprofil.

$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')));

Dieses Beispiel zeigt, dass Sie eine neue Benutzerrolle erstellen und dann auf deren ridEigenschaft zugreifen können , die von ausgefüllt wurde user_role_save(). Es wird auch gezeigt, wie dieser Rolle Berechtigungen hinzugefügt werden user_role_grant_permissions(). In diesem Fall werden der Administratorrolle alle verfügbaren Berechtigungen erteilt.

Wenn Sie die ID einer Benutzerrolle abrufen möchten, die von einer anderen Person erstellt wurde, können Sie user_role_load_by_name()das Objekt für diese Benutzerrolle abrufen. Dann schnappst du dir einfach den Ausweis mit $role->rid.

Chaulky
quelle
2
Dies ist hilfreich, um
Brian Wood
20

Ich möchte ein Codebeispiel hinzufügen, das der ursprünglichen Frage zum programmgesteuerten Zuweisen von Berechtigungen zu vorhandenen Rollen näher kommt.

Sie können die Rollen mit ihrem Namen suchen, die Rollen-ID abrufen und Berechtigungen wie folgt zuweisen (z. B. in einer hook_update-Implementierung):

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);
  }
}
Batigolix
quelle