Hierarchie uživatelů (rolí)
- LuKo
- Člen | 116
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
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 :)
- Vyki
- Člen | 388
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
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
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
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