Jak řešit vlastnictví entit

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

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.

jtousek
Člen | 951
+
0
-

WOW! To mi tedy uniklo. OK tohle téma se může smazat. :)