Hierarchie uživatelů (rolí)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Teyras
Člen | 81
+
0
-

Zdravím,
potřeboval bych pomocí isAllowed() ověřovat i jestli je uživatel nadřazený vlastníkovi zdroje. Příklad – Admin smí smazat článek hosta, ale host nesmí smazat adminův článek.
Jak to co nejelegantněji řešit?

Díky za každou odpověď

toka
Člen | 253
+
0
-

Vidím to jedině tak, napsat si vlastní metodu, která bude toto ověřovat.

Teyras
Člen | 81
+
0
-

toka napsal(a):

Vidím to jedině tak, napsat si vlastní metodu, která bude toto ověřovat.

Jo, to mě taky napadlo, ale zajímá mě spíš praktická realizace… Co mám předávat jako $resource? Jak mám zjistit autora toho článku nebo obrázku nebo čeho?

LuKo
Člen | 116
+
0
-

Teyras napsal(a):
Co mám předávat jako $resource? Jak mám zjistit autora toho článku nebo obrázku nebo čeho?

Zkoumal jsi https://forum.nette.org/…i-permission ?

Teyras
Člen | 81
+
0
-

LuKo napsal(a):

Teyras napsal(a):
Co mám předávat jako $resource? Jak mám zjistit autora toho článku nebo obrázku nebo čeho?

Zkoumal jsi https://forum.nette.org/…i-permission ?

Zkoumal, ale ne dost důkladně, děkuju :)

toka
Člen | 253
+
0
-

Tak toto mi také uniklo… :-)

Majkl578
Moderator | 1364
+
0
-

Pozor, rozhraní IPermissionAssertion bylo odstraněno.

Vyki
Člen | 388
+
0
-

Tak mě napadá, jak máte vyřešeno isAllowed pro parametry. Pokud to vysvětlím na příkladě, mám presenter obchody. Vypsat obchody může každý, přidat shop pouze admin, editovat shop může admin a správce obchodu. Správce obchodu může editovat, ale pouze svůj obchod. Podobná situace jako v prvním příspěvku. Osobně jsem to vyřešil docela univerzálně, ale je to závislé na dazabázi. V tabulce ACL mám ve sloupci allowed možnost tří stavů – Y, N, ID. Pokud je zjištěno že se povolení bude řídit podle ID (role – správce obchodu), sahám do další tabulky, kde vytáhnu název rozhodovacího parametru, jeho hodnotu, id uživatele. Tento parametr potom porovnám s parametry v presenteru. Je nevýhoda, že název rozhodovacího parametru z DB se musí shodovat s názvem vstupní proměnné metod render<NECO>($shopid). Na druhou stranu mě to nutí držet se konvence v názvech promměných v jednotlivých metodách. Signály zatím ošetřeny nemám. Přišlo mi to univeržálnější udělat to takto, než s PermissionAssertion. Jinak obecně vycházím z článku – dynamická správa rolí a zdrojů.

Editoval Vyki (9. 7. 2010 8:12)

LuKo
Člen | 116
+
0
-

Abych nezakládal další vlákno se stejným názvem, přifařím se zde. Přemýšlím nad aplikací, která bude společná pro více firem a jednotliví uživatelé by měli vidět jen na věci ze své firmy, případně mohli koukat na jinou firmu, ale už nemohli upravovat. Zkoumal jsem všechny články související s ACL, ale nenašel jsem tam nic, čeho bych se chytil. Jediné, co mě tedy napadá:

<?php
$acl->addRole('firma1:manazer');
$acl->addRole('firma2:manazer');

$acl->addResource('firma1:statistiky');
$acl->addResource('firma2:statistiky');

$acl->allow('firma1:manazer', 'firma1:statistiky', array('view','edit'));
$acl->allow('firma2:manazer', 'firma1:statistiky', 'view');
$acl->allow('firma2:manazer', 'firma2:statistiky', array('view','edit'));
?>

Nemá někdo lepší nápad?

Gruid
Člen | 25
+
0
-

LuKo napsal(a):

Abych nezakládal další vlákno se stejným názvem, přifařím se zde. Přemýšlím nad aplikací, která bude společná pro více firem a jednotliví uživatelé by měli vidět jen na věci ze své firmy, případně mohli koukat na jinou firmu, ale už nemohli upravovat. Zkoumal jsem všechny články související s ACL, ale nenašel jsem tam nic, čeho bych se chytil. Jediné, co mě tedy napadá:

<?php
$acl->addRole('firma1:manazer');
$acl->addRole('firma2:manazer');

$acl->addResource('firma1:statistiky');
$acl->addResource('firma2:statistiky');

$acl->allow('firma1:manazer', 'firma1:statistiky', array('view','edit'));
$acl->allow('firma2:manazer', 'firma1:statistiky', 'view');
$acl->allow('firma2:manazer', 'firma2:statistiky', array('view','edit'));
?>

Nemá někdo lepší nápad?

Právě se dloubu ve stejným problému a nenapadá mě nic jiného. Klidně bych znovupoložil tuhle otázku. Dá se to udělat nějak lépe? Je tu něco, co mi uniká? Díík.

Šaman
Člen | 2659
+
0
-

Jde to přes vlastní acces pravidla (assertions). Prostě definuješ např. roli firemní administrátor a ta má práva write a update na vlastní firmu. Viz: https://forum.nette.org/…i-permission