Autorizace ke konkrétnímu článku

vrkja
Člen | 1
+
0
-

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

Tohle už je hodně starý kód, ale v principu to tak používám dodnes.

  1. Nastuduj si Nette ACL https://doc.nette.org/…thentication#…
  2. 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 metodou getOwnerId() Kromě toho je potřeba doplnit Nette IResource metodu ) a pro uživatele mít splněné i rozhraní Nette IRole
  3. 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
+
0
-

Mozna pomuze:

https://github.com/…uthorization

a ukazka testu jak se resi pristup ke konkretnimu komentari u clanku: https://github.com/…torTest.phpt