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.
Odpowiedzi:
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
źródło
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 wstandard_install()
funkcji w Standardowym profilu instalacyjnym.Ten przykład pokazuje, że możesz utworzyć nową rolę użytkownika, a następnie uzyskać dostęp do jej
rid
właściwości, która została wypełniona przezuser_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
.źródło
user_role_grant_permissions()
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):
źródło