Üdv!
Adott egy saját modul:
<?php // ... $items = array(); $items[mymodule] = array( 'title' => 'My Module', 'page callback' => 'drupal_get_form', 'page arguments' => array('mymodule_form'), 'access callback' => 'mymodule_user_access', 'access arguments' => array( array('administer mymodule','user mymodule') ), 'file' => 'mymodule.inc', 'weight' => -50, ); $items['mymodule/data'] = array( 'title' => '...', 'page callback' => 'drupal_get_form', 'page arguments' => array('mymodule_data_form'), 'access callback' => 'mymodule_user_access', 'access arguments' => array( array('administer mymodule,'user mymodule') ), 'file' => 'mymodule.inc', 'type' => MENU_LOCAL_TASK, 'weight' => -49, ); // ... stb. ?>
Ezekhez a menühöz nem lehet útvonal álnevet adni és a menükben hivatkozást létrehozni (pl. Főmenüben):
"... útvonal érvénytelen, vagy nincs megfelelő jogosultság az eléréséhez."
Adminként adja ezt a hibát, pedig az útvonal jó, mert működik a böngészőben. A Navigációs blokkban (menüben) is ott van és működik.
Pl.: hivatkozás létrehozása "Főmenü"-ben: Útvonal: mymodule/data <-- hibás mező, ide írja a fenti hibát
Mi miatt nem fogadja el?
Drupal verzió:
Fórum:
mit csinál a mymodule_user_access() fv
Talán ott lesz a hiba... (a kódban amit bemásoltál/írtál?? egy parse_error van egyébként)
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Arról nem is beszélvem, hogy
Arról nem is beszélvem, hogy az access arguments tipikusan a user_access paraméterei, el nem bírom képzelni, hogy ez saját access callbackben mire is kellhet. Szerintem csak ki kell törölni az access callback sort.
----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.
Ha erre gondolsz, ez lenne a
Ha erre gondolsz, ez lenne a szintaktikailag helyes (csak beillesztéskor törölhettem azt a karaktert véletlen):
_user_access
Azért kellett a saját _user_access() fv, mert a alap user_access() csak egy paramétert fogad el (string).
Annyit csinál a saját fv, hogy a tömbben megadott permission paramétereket vizsgálja egy foreach-ben a user_access() fv-el.
Az volt a gond, hogy ha nem adtam meg semmilyen jogosultságot a menühöz, akkor mindenkinek megjelent a menü, még az anonymousnak is - és ezt nem szeretnénk.
Tehát van egy 'administer' és egy 'user' permission. Csak ezeknek jelenhet meg az adott menüpont.
Van erre javaslatotok, mivel lehet szépen megoldani?
ez így jó. :)
ez így jó. :)
Kódot mutatsz, mert nem értem minek a foreach, meg a két paraméter amikor ez egy:
return user_access('administer mymodule') && user_access('user mymodule');
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
hol kellene
Ezt a kódot hol kellene használnom? mymodule_user_access()-ben?
Ezzel működött a jogosultság kezelése, csak az útvonalálnév és menü hivatkozás létrehozás nem szereti(?):
Ha nem anonymous és az utolsó
Ha nem anonymous és az utolsó jogosultsággal rendelkezik, akkor igaz értéket ad vissza ez a fv, szóval ez nem az ami neked kell.
Szóval ettől még látnia kéne a felhasználónak, akinek mindkét jogosultság megvan.
Ha ide egy sima
return true;
beteszel, akkor megjelenik a menü?pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
úgy igen
A mymodule_user_access()-ben a sima return TRUE; kód esetén működik a hivatkozás létrehozás.
Akkor valóban az a kód nem tetszik neki.
Mit javasolsz? Milyen kóddal kezeljem a jogosultságokat?
user_access
Megoldva. Köszönöm a hozzászólásokat.
Ezzel kellett volna kezdenem és akkor nem futottam volna bele:
* Két permission: 'administer', 'user'
* A mymodule_user_access() nem kell, az alap user_access() elég.
* Akinek az 'administer' jog megvan, annak nyilván a 'user' jog is jár:
Így a user_access()-nek csak egy paraméter kell. Ahol az 'user' jog van definiálva ott az administer is elérheti, ill. az 'administer' jogú menüket a user nem éri el.
Ezért irta szantog, hogy a mymodule_user_access() minek, valóban. Köszönöm!