Jak programowo przypisać uprawnienia do ról?


26

Mam uprawnienia, które chciałbym przypisać do niektórych ról programowo, aby ułatwić instalację.

Ponieważ instaluję moduł i tworzę zarówno uprawnienia, jak i role, nie mam identyfikatora roli, w którym chcę ustawić uprawnienia. Do tej pory znalazłem tylko sposoby programowego przypisywania ról, które wymagają identyfikatora roli.

Zastanawiam się, czy mógłbym w jakiś sposób wyszukać role z ich nazwami (ciągami), pobrać identyfikator roli, a następnie przypisać uprawnienia. To po prostu nie pasuje.


Tabela uprawnień używa identyfikatora roli, a nie nazwy roli. Musisz uzyskać identyfikator roli, a następnie dodać uprawnienie przy użyciu tego identyfikatora. Tabela uprawnień potrzebuje następnie ciągu dla uprawnienia i nazwy modułu go implementującego (przynajmniej na Drupal 7); Nie jestem pewien, czy nazwa modułu jest rzeczywiście używana w jakikolwiek sposób.
kiamlaluno

Czy jest coś, czego nie rozumiesz w kodzie, którego powinieneś używać? Jakiego kodu użyłeś? Przydatne byłoby pokazanie kodu; pomogłoby to, kto udzieli odpowiedzi, aby zasugerować, co należy zrobić (np. zgłoszenie nieprawidłowości w kodzie).
kiamlaluno

Dziękuję za odpowiedź. Myślę, że muszę sprawdzić identyfikatory w bazie danych. To nie powinno być takie trudne.
vogelsang

Odpowiedzi:


1

Moduł funkcji robi to całkiem nieźle, umożliwiając eksportowanie ról i uprawnień (i wielu innych rzeczy) za jednym zamachem:

http://drupal.org/project/features

Ale jeśli chcesz stworzyć własny interfejs API do sprawdzania uprawnień:

http://drupal.org/project/permissions_api


2
Problem polega na tym, że nie znasz identyfikatora roli podczas korzystania z funkcji, ponieważ są one przypisywane podczas instalowania funkcji. Dlatego musisz jakoś znaleźć identyfikatory, aby przypisać uprawnienia. Prawdopodobnie jest to tylko wyszukiwanie w bazie danych.
vogelsang

24

Funkcje są bardzo przydatne w przypadku takich rzeczy. Jeśli jednak musisz utworzyć role i programowo dodać uprawnienia, nie musisz samodzielnie przeszukiwać bazy danych.

Gdy utworzysz nową rolę użytkownika user_role_save(), zaktualizuje on przekazany obiekt o nowy identyfikator roli użytkownika, który został przypisany. Możesz zobaczyć przykład tego w standard_install()funkcji w Standardowym profilu instalacyjnym.

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

Ten przykład pokazuje, że możesz utworzyć nową rolę użytkownika, a następnie uzyskać dostęp do jej ridwłaściwości, która została wypełniona przez user_role_save(). Pokazuje także, jak dodać uprawnienia do tej roli za pomocą user_role_grant_permissions(). W tym przypadku przyznaje roli „administratora” wszystkie dostępne uprawnienia.

Jeśli potrzebujesz uzyskać identyfikator roli użytkownika utworzonej przez kogoś innego, możesz użyć obiektu user_role_load_by_name()do uzyskania tej roli użytkownika. Więc po prostu złapiesz identyfikator $role->rid.


2
To jest miłe dla udzielenia / cofnięcia uprawnienia wielu naraz: api.drupal.org/api/drupal/modules%21user%21user.module/function/...
Brian Wood


20

Chciałbym dodać przykład kodu, który jest bliższy pierwotnemu pytaniu, jak programowo przypisywać uprawnienia do istniejących ról.

Możesz wyszukać role z ich nazwami, pobrać identyfikator roli, a następnie przypisać uprawnienia w następujący sposób (na przykład w implementacji 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);
  }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.