ACL, zjištění jména aktuálního uživatele a jeho role

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

Ahoj, jak zjistím, který uživatel je aktuálně přihlášen a v jaké je roli? Na webu jsem nic nenašel, tak jsem namátkou zkoušel něco jako:

\Nette\Environment::getUser()->getRole();
\Nette\Environment::getUser()->getUsername();

ale samozřejmě taková funkce neexistuje.

Aurielle
Člen | 1281
+
0
-

getRoles(), getId()

Mikulas Dite
Člen | 756
+
0
-

Username si musíš uložit sám do $user->identity->data->username, nebo můžeš User rozšířit o další property.

nanuqcz
Člen | 822
+
0
-

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

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.

nanuqcz
Člen | 822
+
0
-

Máš pravdu, už mi to funguje :-) V autorizaci a autentizaci je na mě těch objektů a tříd, které do toho vstupují, nějak moc, strašně lehce se v tom dá ztratit. Díky moc

David Ďurika
Člen | 328
+
0
-

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

westrem
Člen | 398
+
0
-

Existuje aj nieco ako navod na dynamicku spravu roli a zdroju ;)

bojovyletoun
Člen | 667
+
0
-

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)?