Autorizace – dynamické načítání práv z db

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

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
+
0
-

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š…