ACL, zjištění jména aktuálního uživatele a jeho role
- Mikulas Dite
- Člen | 756
Username si musíš uložit sám do
$user->identity->data->username
, nebo můžeš
User
rozšířit o další property.
- nanuqcz
- Člen | 822
Díky, už jsem na to přišel :-)
\Nette\Environment::getUser()->getId(); //id uživatele
\Nette\Environment::getUser()->getRoles(); //role uživatele (nevěděl jsem že jich může mít víc)
\Nette\Environment::getUser()->getIdentity()->getData(); //další data zapsaná do jeho Identity
Ale mám teď další problém. Mám uživatele, jejich role a práva uložené v databázi. Myslel jsem si, že nepřihlášený uživatel na sebe vezme automaticky roli uživatele guest spolu s jeho právy. Ale vypadá to že ne, a nepřihlášený uživatel tak nemá v mojí aplikaci žádné práva, což takhle nechci :-D Napadlo mě jenom do BasePresenteru přidat něco jako
if(!\Nette\Environment::getUser()->isLoggedIn() ){
\Nette\Environment::getUser()->login('guest', /*heslo*/);
}
Bohužel „heslo“ od každého uživatele se bude moct v administraci měnit, takže buď v administraci natvrdo zakážu editaci uživatele guest, nebo budu muset změnit metodu authenticate, aby (zase natvrdo) pro uživatele guest nekontrolovala heslo.
Ale nevím, jestli uvažuju správným směrem, protože měnit něco natvrdo v kódu mi nepřijde jako správná cesta :-)
- Mikulas Dite
- Člen | 756
Odhlášený uživatel má opravdu roli guest
. Problém bude asi
spíš v tom, že si pro tuhle roli nenastavil v acl co může dělat.
- David Ďurika
- Člen | 328
Zdravim, ja s acl tiez len zacinam…
pisal si ze:
Mám uživatele, jejich role a práva uložené v databázi.
mozes mi pls visvetlit ako mas ulozene data v tabulke, a ako potom vytvaras opravnenia pre uzivatelov…
presiel som si ten tut. co je o ACL ale tam je to natvrdo v subore… tak by som potreboval know-how ako na nacitanie privilegii cez DB
dik
- bojovyletoun
- Člen | 667
Ahoj, jak řešíte ACL, kdy rovnou každý user má nějaké práva
k operacím nad resources? Tzn, že role jsou z toho úplně vynechané. Je
vhodné vytvářet acl, tak, že jako název role zadám id uživatele: např
$acl->allow($user->id,'book','buy')?
Nebo si na to napsat
vlastní authorizator(resp podědit, protože kódu z Permission by tam
bylo dost)?