Autorizace – dynamické načítání práv z db
- Peetee
- Člen | 75
Ahoj,
právě řeším autorizaci uživatelé a není mi jasný kdy (čti v jaké třídě/funkci) mám načítat práva uživatele. Předpokládám, že by to mělo být hned poté co dostanu z NEnviroment::getUser() ID uživatele.
Připojím příklad, proč něco takového řeším, mám:
<?php
$acl = NEnvironment::getService('Nette\Security\IAuthorizator');
$acl->addRole('autor');
$acl->addRole('editor','autor');
$acl->addRole('admin','editor');
$acl->addResource('uzivatele'); //správa uzivatelu
$acl->addResource('clanky'); //správa clanku
$acl->addResource('kategorie'); // správa kategorií
// a další zdroje...
$acl->allow("editor","clanky"); // editor může spravovat všechny články
$acl->allow("admin","uzivatele"); //uživatele může spravovat jen admin
$acl->allow("admin","kategorie"); // přidávání kategorií může jen admin a kategorie se mění za běhu
?>
Autor samozřejmě také může spravovat články, ale pouze články v nastavených kategoriích. Moje teorie je taková, že bych někam hned po přihlášení uživatele se dotázal do db, vytáhl si pouze nastavení tohoto uživatele a nastavil práva pro roli „autor“ na kategorie, které má povolené tj. kdyby se přihlásil jiný autor, tak by nastavení práv bylo úplně jiné. Je to dobrý nápad?
tj. po načtení z db (Select kategorie from table where user_id=$id) do $kategorie. Samozřejmě uživatel by mohl mít práva k více kategoriím – tj. pak by se příklad méže provedl v cyklu:
<?php
$acl->allow=("autor","clanky","kat_".$kategorie);
?>
Editoval Peetee (16. 8. 2010 20:23)
- Aurielle
- Člen | 1281
Práva uživatele ti načítá jeho role. Role, resources a oprávnění bych definoval přímo v konstruktoru třídy, kterou podědíš z Permission… a přečti si https://forum.nette.org/…i-permission, toto dělá přesně to, co potřebuješ…