Odpowiedzi:
Tak długo, jak każdy moduł może definiować własne uprawnienia, nie ma „ścisłej” listy tych ciągów. Będziesz musiał ją „skonstruować”, jeśli naprawdę potrzebujesz programowo takiej listy.
Możesz uruchomić ten skrypt na stronie / devel / php. (Oczywiście potrzebujesz modułu Devel .)
// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
print_r($module);
// Drupal 6
// if ($permissions = module_invoke($module, 'perm')) {
// print_r($permissions);
// }
// Drupal 7
if ($permissions = module_invoke($module, 'permission')) {
print_r($permissions);
}
}
Jak powiedział @Berdir, najłatwiejszym sposobem sprawdzenia, które uprawnienia są dostępne, jest przejście do uprawnień admin / people / permissions w Drupal 7.
Problem, na który ciągle wpadałem, polegał na tym, że nigdy nie mogłem ustalić, jaki ciąg znaków muszę podać jako „argument dostępu”, aby faktycznie skorzystać z pozwolenia. Oto, jak znaleźć nazwę ciągu dla uprawnień, których chcesz użyć (w tym przykładzie użyto przeglądarki Google Chrome).
Krok pierwszy. Przejdź do admin / people / permissions, znajdź uprawnienie, którego chcesz użyć, i kliknij prawym przyciskiem myszy pole wyboru po prawej stronie uprawnienia, którego chcesz użyć. Wybierz „Sprawdź element” lub po prostu spójrz na źródło.
Następnie poszukaj wartości pola wyboru i zanotuj wartość. (W tym przypadku ciąg znaków to „Utwórz treść kuponu”)
Jest to ciąg, który musisz podać jako argument dostępu w hook_menu ()
Przykładowy kod: (usunięto niepotrzebne elementy, nie zapomnij tytułu, oddzwonienia itp. W hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Oto wersja odpowiedzi Hazy D7, zmodyfikowana tak, by używała DSM zamiast print_r i pomijała moduły, które nie implementują uprawnień hook_permission:
// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
if ($permissions = module_invoke($module, 'permission')) {
// List only the modules that have permissions.
dsm($module);
dsm($permissions);
}
}
Możesz użyć user_permission_get_modules()
funkcji, która zwraca tablicę wszystkich zdefiniowanych uprawnień i ich modułów.
Określ moduły, do których należą uprawnienia.
Zwracana wartość
Tablica asocjacyjna w formacie $ zezwolenie => moduł $.
Najprostszym sposobem jest sprawdzenie strony uprawnień (D7: admin / people / permissions, D6: admin / user / permissions). Zauważ, że bezpośrednio używasz wyświetlanego ciągu w Drupal 6, w przypadku 7 musisz spojrzeć na nazwę / wartość pola wyboru. Wynika to z faktu, że uprawnienia mają teraz przetłumaczony tytuł i opis w Drupal 7.
Więc jeśli chcesz mieć nazwę uprawnienia „Wyświetl opublikowaną treść” w Drupal 7, wartość to „dostęp do treści”, która jest nazwą twojego uprawnienia.
Jeśli wiesz, z którego modułu pochodzi uprawnienie, możesz również sprawdzić odpowiednią implementację hook_perm () (D6) / hook_pemission () (D7) tego modułu.
W wielu przypadkach chcesz zdefiniować własne pemisje i użyć ich, możesz to zrobić za pomocą powyższych haków.
Korzystanie z modułu Devel
Po zainstalowaniu i włączeniu modułu Devel przejdź do admin/config/development/devel
. Istnieje ustawienie zatytułowane „Wyświetlaj nazwy uprawnień i modułów komputera”. Upewnij się, że jest zaznaczone.
Teraz na stronie uprawnień w people/permissions
najedź kursorem na nazwę uprawnienia, o które pytasz. Może to opóźnić sekundę lub dwie, ale wtedy pojawi się wartość ciągu.
Oto prosta zmiana formularza, która doda klucz uprawnień do nazwy na stronie uprawnień. To powinno ułatwić wyszukiwanie. Będziesz musiał dodać go do niestandardowego modułu i zastąpić „mymoduł” nazwą tego modułu.
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
foreach ($form['permission'] as $key => &$item) {
if (isset($item['#type']) && $item['#type'] == 'item') {
$item['#markup'] .= ' (' . $key . ')';
}
}
}
Stworzyłem ten fragment kodu JavaScript, który mi w tym pomaga. Przetestowałem to w Drupal 7 tylko na temat Shiny .
Zasadniczo wyświetla nazwę komputera, pobraną z pierwszego pola wyboru przy tej nazwie, do pierwszej komórki pod etykietą. Skrypt opiera się na jQuery, co nie powinno stanowić problemu w Drupal 7.
Zwykle wklejam go na konsolę Narzędzi programisty i uruchamiam z tego miejsca. W przyszłości mogę utworzyć dla niej bookmarklet.
// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
// Get the first checkbox in the row.
checkbox = jQuery('.checkbox .form-checkbox', this).first();
// Get the first cell, containing the permission label.
nameCell = jQuery('td:first-child', this);
// In case this is not a permission row
if(checkbox.length == 0) {
return;
}
// Embed the permission maching name on permission label cell.
nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});
Jest to prosty moduł, który ułatwia: dostęp do listy argumentów
pozdrowienia
po prostu wrzuć moduł, zobaczysz uprawnienia komputera w / admin / people / permissions
function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state)
{
$perms = &$form['permission'];
$group_counter = 0;
foreach ($perms as $k => &$v) {
if ($k == $group_counter) { // skip fieldsets
$group_counter++;
continue;
}
$v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)';
}
}
pozdrowienia
array_keys()
, oczywiście uzyskasz tylko wymagane informacje. Możesz następnie użyć wynikuuser_role_grant_permissions
, na przykład, aby przyznać roli administratora wszystkie uprawnienia:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));