Vysvetlenie oprávnení užívateľov

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

Nepochopil som celkom tie oprávnenia ako sú popísané tu: https://doc.nette.org/…thentication, neviem kde definovať role, pridať zdroje a povoliť určitým užívateľom niektoré zdroje..
Toto som skúsil dať do autentikátora

$acl = new Nette\Security\Permission;

// definujeme role
$acl->addRole('guest');
$acl->addRole('member', 'guest');
$acl->addRole('admin', 'member');

zato som dal

$acl->addResource('profile');
        $acl->allow('admin', 'profile');

//teda, že admin bude môcť prezerať profil. (ak teda profil môže byť templates/User/profile). Vôbec som to nepochopil, ani to čo má byť tým zdrojom, zatiaľ som to riešil takto:

<p><a n:href="Sign:in" n:if="Nette\Environment::getUser()->isInRole('guest')">Prihlásiť</a></p>
        <p><a n:href="Sign:out" n:if="Nette\Environment::getUser()->isInRole('member')">Odhlásiť</a></p>
  • problém nastal, keď som jednému užívateľovi zmenil „hodnosť“ v stlpci role z „member“ na „admin“, vtedy by mi mal autentikátor asi vrátiť pole rolí, neviem ako to vyriešiť, dúfam, že to nieje blbá otázka. Keď mi toto niekto objasní budem veľmi rád :)
Oli
Člen | 1215
+
0
-

Je to jednoduchý.

Nadefinuješ si uživatele, jakýkoli uživatel (string).

$acl = new Nette\Security\Permission;

// definujeme role
$acl->addRole('otec');
$acl->addRole('dcera');

Nadefinuješ si zdroje(jakýkoli string)

$acl->addResource('pocitac');
$acl->addResource('televize');

Povolíš, respektive zakážeš nějaký akce pro uživatele nad daným zdrojem

$acl->allow('otec', array('televize', 'pocitac'), array('sledovat', 'ovladat', 'kupovat', 'prodavat'));
$acl->allow('dcera', array('televize', 'pocitac'), 'sledovat');
$acl->allow('dcera', 'televize', 'ovladat');

Tak a tady mame malou rodinu, kde může otec kupovat, ovladat, sledovat a prodavat pocitac a televizi. Dcera muze sledovat pocitac a televizi a ovladat televizi. Pocitac ovladat nemuze…

V presenteru se potom zeptáš, jestli uživatel může dělat něco s něčím.

$this->getUser()->isAllowed('pocitac', 'ovladat'); // pokud má uživatel roli otec, může, pokud má roli dcera nemůže
$this->getUser()->isAllowed('televize', 'ovladat'); // muze ovladat at ma roli otec nebo dcera

Priklad pouziti

if ($this->user->isAllowed('pocitac', 'koupit')
{
	$this->otecKupujePocitac();
} else
{
	$this->flashMessage('Dcero, nemůžeš nic kupovat!', 'warning');
	$this->redirect('kuchyn:varit', 'spagety');
}
enumag
Člen | 2118
+
0
-

Ohledně otázky kde ty privileges definovat: https://forum.nette.org/…zace-pouziti#….

iNviNho
Člen | 352
+
0
-

Oli super vysvetlené, doposiaľ som si riešil práva cez getIdentity a tam som si naplnil „rolu“ údajom z DB a potom v app kontroloval, ale toto je cool enough!

lime
Člen | 55
+
0
-

Ďakujem za vysvetlenia :) Ale ako mám teda vytvoriť tú službu? Spravil som si model AuthorizatorFactory.php a služby som upravil takto:

services:
		app.authorizatorFactory: App\AuthorizatorFactory
		app.authorizator: @app.authorizatorFactory::create

Výnimka: ‚Service of type Nette\Security\IAuthorizator not found‘

enumag
Člen | 2118
+
0
-

@lime: Nesahals na tu @return anotaci u App\AuthorizatorFactory::create()? Musí být fully-qualified (ve 2.1 už nebude muset).

Editoval enumag (11. 12. 2013 21:32)

lime
Člen | 55
+
0
-

enumag napsal(a):

@lime: Nesahals na tu @return anotaci u App\AuthorizatorFactory::create()? Musí být fully-qualified (ve 2.1 už nebude muset).

áno, som myslel, že to je len „zbytočný“ komentár, ešte raz ďakujem obidvom za vysvetlenia už to asi chápem :)

newPOPE
Člen | 648
+
0
-

Ono cele to staticke vyhodnocovanie je super. No v X% pripadov to nebude postacovat a pride na mocny 4 parameter https://api.nette.org/…ion.php.html#… $assertion ;-). A tam zacina sranda…

BTW: Nemate niekto nejake example vonku? Sice mame riesenie ale porovnat si to predsa len nie je na skodu.