Vysvetlenie oprávnení užívateľov
- lime
- Člen | 55
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
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
Ohledně otázky kde ty privileges definovat: https://forum.nette.org/…zace-pouziti#….
- lime
- Člen | 55
Ď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‘
- newPOPE
- Člen | 648
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.