Jak mogę znaleźć listę dostępnych wartości $ string dla funkcji user_access ($ string)?


27

user_access ($ string, $ account = NULL)

$ string: Sprawdzane jest uprawnienie, takie jak „administruj węzłami”.

Jak znaleźć listę dostępnych wartości $ string dla user_access()funkcji?

Odpowiedzi:


12

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

26

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.

Przykład

Następnie poszukaj wartości pola wyboru i zanotuj wartość. (W tym przypadku ciąg znaków to „Utwórz treść kuponu”)

wprowadź opis zdjęcia tutaj

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;
}

9

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

6

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ł $.


2
Jeśli go owiniesz array_keys(), oczywiście uzyskasz tylko wymagane informacje. Możesz następnie użyć wyniku user_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()));
aross

4

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.


RE: „Najłatwiej jest sprawdzić stronę uprawnień (D7: admin / people / permissions,).”. Strona pokazuje listę uprawnień, ale są one ciągiem czytelnym dla człowieka, a nie ciągiem do odczytu maszynowego.
gilzero

1
Jak napisałem poniżej, nazwę odczytywalną maszynowo można wyodrębnić z wartości dowolnego pola wyboru dla danego uprawnienia.
Berdir

Ta odpowiedź obejmuje Drupala 6 i 7, zaakceptowany tylko Drupal 6 - ale przyjęta odpowiedź jest fajną sztuczką i może być łatwo zmieniona dla Drupala 7. =)
Greg

4

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/permissionsnajedź kursorem na nazwę uprawnienia, o które pytasz. Może to opóźnić sekundę lub dwie, ale wtedy pojawi się wartość ciągu.


Wow, nie wiedziałem o tym. Widziałem to po opublikowaniu mojej odpowiedzi. Dzięki!
Batandwa

Bardzo przydatne! TYVM.
DrCord,

Słodkie, znacznie łatwiejsze niż otwieranie kodu modułu!
bloke_zero

1

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 . ')';
    }
  }
}

1

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>");
});

A dzięki usłudze Bookmarkify.it możesz znaleźć bookmarklet tutaj .
Batandwa

To naprawdę przydatne narzędzie, ty!
DrCord,



0

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

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.