Autorizace pomocí anotací – Nette 2.0 beta checkroles()
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- bojovyletoun
- Člen | 668
V souvislosti s uvedením verze 2 beta jsem si všiml u Presenter a PresenterComponent metody checkRequirements, kde jse „základní“ implementace přihlášení. Proto si myslím, že by se to mohlo dotáhnout do konce. Mám tedy jen nějaký draft, jakou by to mohlo mít podobu.
- zatím se řeší pouze část „výkonná“, tedy tryCall, resp start Presenteru. Druhá „odkazová“ ( zobrazit odkaz alias známé „n-if-allowed“ zatím neřeším.)
- jakou udělat syntaxi? Byly zde různé nápady: @user, @allowed, @secured,… Mě napadlo a líbí se mi vyjít z metod User: loggedIn, inRole, allowed. (případně přidat „is“, ale to se mi moc nelíbí).
- rozbor jednotlivých možností(použiji zkratky P pro celý presenter, resp
M pro metodu):
- @loggedIn je zřejmé pro P i M
- @inRole: co když uvedu pole? Bude to platit jako AND nebo OR? Myslím, že o tom tady byla diskuze, zda se role používají hiaerchicky(redaktor znamená mít editora i člena) nebo se uvádí jejich výčet (role na sebe nabalujeme, až nám vznikne admin). Lepší se mi zdá první přístup , ale nakonec se dojde k tomu, že je to jedno. Bude se tedy počítat s možností vyjmenovat více rolí?
- @allowed. Zde to bude složitější
- pro Presenter: symbolizuje možnost spustit tento presenter. Nechci svazovat
ruce, takže je vhodné mít možnost uvést
@allowed(Objednavky)
, ale i magicky@allowed($this)
– kde se za resource doplní aktuální presenter. - pro Metody, ukážu v ukázce. Nevím pro co se rozhodnout, ale víc zápisů mi přijde matoucí. Je možno dosadit parametry. Použití $this je zatím dost nepochopitelné, ale je to třeba možné změnit na jiné placeholdery. – Resp, lze uvést ve sprintf formátu – např @allowed(article.$id,$method)
- pro Presenter: symbolizuje možnost spustit tento presenter. Nechci svazovat
ruce, takže je vhodné mít možnost uvést
Ukázka:
Editoval bojovyletoun (30. 5. 2011 20:42)