D7, "útvonal érvénytelen..." hivatkozás hiba

makgab képe

Ü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ó: 
pp képe

Talán ott lesz a hiba... (a kódban amit bemásoltál/írtál?? egy parse_error van egyébként)

pp

0
0
szantog képe

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.

0
0

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

makgab képe

Ha erre gondolsz, ez lenne a szintaktikailag helyes (csak beillesztéskor törölhettem azt a karaktert véletlen):

    'access arguments' => array( array('administer mymodule','user mymodule') ),
0
0
makgab képe

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?

0
0
pp képe

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

0
0
makgab képe

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(?):

function mymodule_user_access( $perm ) {
  $ret = FALSE;
  foreach ( $perm as $p ) {
    if ( user_access( $p ) AND !user_is_anonymous() ) $ret = TRUE;
  }
 
  return $ret;
}
0
0
pp képe

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

0
0
makgab képe

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?

0
0
makgab képe

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.

Pl.: Admin role -> 'administer','user' permission
     User role -> 'user' permission

Ezért irta szantog, hogy a mymodule_user_access() minek, valóban. Köszönöm!

0
0