node/add/... jogosultság

fox mulder képe

Sziasztok!

A Pro Drupal Development 2. ed. alapján próbálkozom, de nem sikerül elérnem, hogy egy nem jogosult felhasználó számára ne is jelenjen meg egy link (a hozzáférés meg van tagadva, de azt szeretném, hogy a link se jelenjen meg).
A modulom definiál egy tartalomtípust:

function my_module_node_info() {
return array(
'my_content_type' = array(
...
'module' => 'my_content_type',
...
),
...
);
}

hook_perm():
function my_module_perm() {
return array('create my content type', 'delete my content type');
}

hook_access() [Itt mi a helyes név? my_module_access, vagy my_content_type_access?]:
function my_module_access($op, $node, $account) {
switch ($op) {
case 'create':
return user_access('create my content type', $account);
break;
}
}

hook_menu_alter():
hook_menu_alter() {
...
if (!user_access('create my content type')) {
$callbacks['node/add/my-content-type']['access callback'] = FALSE;
unset(['node/add/my-content-type']['access arguments']);
}
...
}

Szóval csak annyit érek így el, hogy a nem jogosult felhasználó kap egy "Nincs jogosultsága..." üzenetet, de én azt szeretném, hogy az új tartalomtípushoz tartozó "node/add/my-content-type" link egyáltalán ne is jelenjen meg a Tartalom beküldése menüpont alatt. Elvileg így is kéne működnie, nálam mégsem így van. Linket nem tudok adni, mert localhost-on van a cucc.
Drupal verzió: 
fox mulder képe

A hook_menu_alter() helyesen:

function my_module_menu_alter(&$callbacks) {
...
if(!user_access('create my content type')) {
$callbacks['node/add/my-content-type']['access callback'] = FALSE;
unset($callbacks['node/add/my-content-type']['access arguments']);
}
...
}
0
0

Fox Mulder

eMeLA képe

Szerintem a hook_menu_alter()-re nincs szükség !?

Legalábbis ebben a példában nincs róla szó: http://api.drupal.org/api/file/developer/examples/node_example.module/6/...

A hook_access() szerintem mindig a modulra vonatkozik, vagyis my_module_access()

0
0

...mit tudok: http://web.termuves.hu

fox mulder képe

Nem tudom, lényeges-e a kérdés szempontjából, de az én modulom több tartalomtípust is kreál, ennyiben különbözik a node.example példától. Érdekes (és érthetetlen), hogy ha kikapcsolom és eltávolítom a modult, akkor minden olyan rekord eltűnik a menu_links táblából, ahol a link_path értéke 'node/add/my-content-type-1', 'node/add/my-content-type-2' stb, kivéve azt a bizonyosat.

UI.: Még érdekesebb: miután 'kézzel' kivettem a kérdéses rekordot a menu_links táblából és a javaslatodat követve kivettem a hook_menu_alter()-ből a vonatkozó részt, majd be- és kikapcsoltam a modult, íme 'coda töjtént': most eltakarította maga után az összes 'node/add/my-content-type-x' linket, amit bekapcsoláskor létrehozott.

0
0

Fox Mulder

eMeLA képe

Lehet, hogy csak a cache táblákat keltet volna törölni !?

0
0

...mit tudok: http://web.termuves.hu

fox mulder képe

Ha jól rémlik, a cache_menu táblát kiürítettem, ám ez miért változtatná meg a menu_links rekordjait? Ha abban marad a rekord, a link meg is jelenik, nem?

UI.: Két új témát érdemelne, de egyrészt a menük már többször szívattak, másrészt megérne egy misét a "hogyan takarítsa el egy eltávolított modul maga után a szemetet" témakör.

0
0

Fox Mulder