Jak řešit vlastnictví entit
- jtousek
- Člen | 951
Mějme nějaký web, který slouží primárně k publikování článků. V administraci je typicky potřebné rozlišovat, komu článek patří a podle toho rozdělit práva:
administrátor – má přístup ke všem článkům
šéfredaktor – něco mezi, např. může články ostatních redaktorů postupně zveřejňovat, ale nemůže je mazat
redaktor – může upravovat pouze své články, články ostatních může pouze číst
Smozřejmě byhc mohl napsat něco jako:
if ($user->isAllowed('article', 'edit') || ($user->isAllowed('article', 'editown') && $article->getAuthor() == $user->getIdentity()->getId()) {
//...
}
Ale vážně, komu se něco takového líbí? Mě tedy rozhodně ne. Zvlášť když bych to musel zas a znovu psát ve všech presentech a šablonách, které se týkají něčeho, co podléhá takovýmto právům.
Řešit to nějak obecně pravděpodobně znamená nepoužít Permission. Ideálem by byly práva přímo postavená přímo nad entitami, s tím, že pokud nad danou entitou (článkem) nemá uživatel povolenu danou akci, nezobrazí se ani odkaz, ani se nespustí daná action. Kontrola práv IMHO do action rozhodně nepatří. Jinak totiž nelze zautomazizovat zobrazování odkazů.
Možná už to někdo má vyřešené, možná taky ne. V každém případě budu rád za jakékoli nápady nebo myšlenky. Zatím mám jen poměrně hrubou představu. Pokud se mi to podaří implementovat nějak hezky, dám kód k dispozici ostatním.