Autorizace ke konkrétnímu článku
- vrkja
- Člen | 1
Ahoj, jak byste v nette řešili například zda má uživatel právo editovat konkrétní článek? Řekněme, že článek smí editovat autor a případně nějaký admin. Je nějaký doporučený způsob jak tohle řešit v nette? V symfony je to možné jednoduše přes votery, ale v nette si nejsem jistý. Díky!
- Šaman
- Člen | 2659
Tohle už je hodně starý kód, ale v principu to tak používám dodnes.
- Nastuduj si Nette ACL https://doc.nette.org/…thentication#…
- Zdroje, které chceš hlídat na úrovni jednotlivých ID si dej za nějaké
rozhraní (používám
vlastní
IResource
s jedinou přidanou metodougetOwnerId()
Kromě toho je potřeba doplnit Nette IResource metodu ) a pro uživatele mít splněné i rozhraní Nette IRole - V Autentikátoru můžeš mít definovanou funkci, která rozhodne o udělení oprávnění (v ukázce řádek 36). A rovnou v něm můžeš mít onu funkci, která porovná userId a ownerId.
V této ukázce má admin práva na všechny entity, uživatel má práva na
všechny své entity. Pokud je nějaký zdroj statický (tedy když
nepředáváš instanci IRole, ale jen jeho textové označení), bude
rozhodnuto jen jestli má uživatel statická práva (dodatečná funkce tedy
vraci vždy true
).
Použití (koukám, že to v kódu nepoužívám, byl to jen skeleton).
$acl->isAllowed('admin', 'Project', 'delete'); // true; role i resource jsou definovaé staticky
$this->user->isAllowed($project, 'delete') // zjistí, jestli TENTO uživatel má práva na TENTO projekt
$this->user->isAllowed('Project', 'delete') // true, TENTO uživatel má práva na některý projekt
Editoval Šaman (27. 7. 2020 12:43)
- chemix
- Nette Core | 1310
Mozna pomuze:
https://github.com/…uthorization
a ukazka testu jak se resi pristup ke konkretnimu komentari u clanku: https://github.com/…torTest.phpt