Oprávnění uživatelů s více rolemi

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

Poradí prosím někdo jak udělat autentifikátor a autentizaci uživatelů. Chtěl bych aby jednotlivý registrovaní uživatele mohli patřit více rolím.
Definoval jsem si tabulku uživatele s nickem, heslem…
dále pak tabulku s rolemi:programátor, projektant, admin
a pak tabulku která nám řekne v kolika je uživatel rolích. V této tabulce je vždy teda cizí klíč z tabulky uživatele a z tabulky role

Poradí prosím někdo jak udělat autentizaci a autorizaci? Aby když má jednotlivý uživatel více rolí měl i oprávnění všech rolí ke kterým patří?

Jsem v nette začátečník..Kdysi jsem v něm dělal, ale moc věcí se od té doby změnilo.

David Matějka
Moderator | 6445
+
0
-

https://api.nette.org/…dentity.html

authenticator vraci instanci Identity, jako druhej parametr posles seznam roli..

jako autorizator pouzij \Nette\Security\Permission

Nette\Security\User (tj to pristupny v presenteru pres $this->user) ma metodu isAllowed($resource, $privilege), ktera projde vsechny role predany Identity a pres Permission zjisti, jestli nektera z roli ma opravneni k te akci..

vice na https://doc.nette.org/…thentication

Miky0007
Člen | 73
+
0
-

Hmm děkuju. A jak získám to pole rolí? Resp jak se dělá dotaz přes více tabulek prosím?

David Matějka
Moderator | 6445
+
0
-

https://doc.nette.org/cs/database

pro strukturu databaze:
user

  • id
  • username
  • password

user_role

  • user_id
  • role_id

role

  • id
  • name

kod v authenticatoru zhruba:

//ziskani uzivatele a overeni hesla atd.
//v $user se predpoklada activerow s uzivatelem.

$roles = array();
foreach($user->user_role as $user_role){
	$roles[] = $user_role->role->name;
}

$data = $user->toArray();
unset($data['password']);
return new \Nette\Security\Identity($user->id, $roles, $data);

Editoval matej21 (4. 11. 2012 16:26)

Miky0007
Člen | 73
+
0
-

Ahá děkuju moc vyzkouším to…

Miky0007
Člen | 73
+
0
-

už jsem to rozchodil.
Jen stačilo doplnit
foreach($row->related(‚uzivatelske_role‘) as $uzivatelske_role){
$roles[] = $uzivatelske_role->role->opravněni;