[gelöst]Bestimmern was eine Permission den letztendlich erlaubt
Eingetragen von dontgotanick (156)
am 21.05.2010 - 08:45 Uhr in
am 21.05.2010 - 08:45 Uhr in
Hi,
evtl eine blöde Frage aber ich finde iwie nichts sinnvolles dazu.
Wie ich Permissions in eigenen Modulen definiere weiss ich per hook_perm().
Aber wie sage ich denn jetzt was diese letztendlich bewirkt.
LG
david
- Anmelden oder Registrieren um Kommentare zu schreiben
user_access
am 21.05.2010 - 08:59 Uhr
Hallo.
Die entsprechenden Funktionsteile kannst Du dann mittels [api:user_access] vor Benutzern ohne entsprechende Berechtigung "ausklammern".
Mit dieser Funktion prüfst Du also, ob ein Benutzer die gewünschte Berechtigung hat.
hth,
Stefan
Ok aber iwie...
am 21.05.2010 - 09:15 Uhr
funzt das nicht so wie ich mir gedacht habe.
Ich will das wenn einer die Permission hat administer Registration hat auf die settings Seite darf.
Das habe ich Versucht so zu realisieren was ist falshc denn es funzt nicht.
function cwg_registration_perm() {
return array('administer registration');
} // function cwg_registration_perm()
function cwg_registration_menu() {
if (user_access('administer registration')) {
$items = array();
$items['admin/settings/cwg_registration'] = array(
'title' => 'CWG-Registration module settings',
'description' => 'Expands the registration process with certain notifications',
'page callback' => 'drupal_get_form',
'page arguments' => array('cwg_registration_admin'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
}
LG
dave
hook_menu
am 21.05.2010 - 09:47 Uhr
Bitte schau Dir nochmal die Dokumentation zu [api:hook_menu] an. Du kannst dort direkt angeben, welche Berechtigungen zur Anzeige des Menüpunktes (und somit zum Zugriff auf die Seite) notwendig sind.
Stichwort: "access arguments".
[api:user_access] ist hierbei nicht notwendig, da die Funktion explizit als Standard "access callback" aufgerufen wird.
Stefan
Hi
am 21.05.2010 - 09:51 Uhr
ja das habe ich angepasst weil ich da ja den falschen Wert drinstehen habe,
aber es kommt immer restricted area?
Menüs werden auf Vorrat gebaut, deshalb...
am 27.05.2010 - 13:11 Uhr
...hier mal der überarbeitete Code, der so laufen müßte wenn Du sonst alles richtig gemacht hast:
function cwg_registration_perm() {
return array('administer registration');
} // function cwg_registration_perm()
function cwg_registration_menu() {
// weg damit, siehe Anmerkung 1 unten -> if (user_access('administer registration')) {
$items = array();
$items['admin/settings/cwg_registration'] = array(
'title' => 'CWG-Registration module settings',
'description' => 'Expands the registration process with certain notifications',
'page callback' => 'drupal_get_form',
'page arguments' => array('cwg_registration_admin'),
// siehe Anmerkung 2
'access arguments' => array('administer registration'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
// auch weg, klar!: }
}
Anmerkung 1: Das Menü wird zwischengespeichert. Es wird nur neu erstellt, wenn der Befehl dazu explizit erteilt wird, z.B. bei Installation einer Moduls, oder wenn eine inhaltliche Änderung eben auch Auswirkungen auf die globale Menüstruktur hat (siehe menu_rebuild()). Die Tabelle enthält dann neben URL und Menutitel eben auch noch die schon genannten Callbacks (s. Anmerkung 2 und Hinweis von stborchert) und ihre Parameter, sodaß letztlich beim Aufruf einer Seite nicht das gesamte Menü gebaut wird, sondern nur noch die passenden Einträge aus der Tabelle geholt und dann immer aktuell mit den Berechtigungen abgeglichen werden.
Anmerkung 2: Der Abgleich geschieht, sofern du nicht in dem Menüpunkt-Array sowas wie
'access callback' => true
stehen hast oder eine eigene Funktion, die das dann z.B. modulintern erledigt, wie hier:
'access callback' => 'deinmodul_check_access'
und entweder true oder false zurückgibt, mit dem genannten Standardcallback user_access(). Dieser wird von DP automatisch aufgerufen, wenn du keine eigene Definition erstellt hast; eigentlich steht also "unsichtbar" anstelle meines zweiter Kommentars in deinem Code:
'access callback' => 'user_access'
.Der Aufruf durch Drupal erfolgt dann mit den "access arguments" und sieht in deinem Fall intern etwa so aus:
$permitted = user_access(array('administer registration'));
Sofern der aktuelle User nun einer Rolle angehört, für die unter "Berechtigungen" deine "administer registration"-Erlaubnis gesetzt ist, ist das Ergebnis "true" und der User erhält den Menüpunkt angezeigt sowie Zugriff auf den entspr. URL.
Ich hoffe, das hilft dir und ich habe es nicht zu kompliziert gemacht.
Hi
am 28.05.2010 - 10:00 Uhr
danke für deine Antwort aber das funktioniert auch nicht.
Wer ne Idee?
gelöst
am 05.07.2010 - 08:21 Uhr
Hatte nen Tippfehler .............