ACL (Access Control List) – nefungují oprávnění
- gizer
- Člen | 67
Ahojky,
má trochu problém s ACL. Nadefinoval jsem uživatel, zdroje a
oprávnění. Bez problému se přihlásím jako admin, member nebo guest popř.
se úplně odhlásím. Podle nastavení v common.neon bych neměl mít
přístup na stránku administration:default jako odhlášený nebo jako guest.
Pouze jako admin nebo member. Přesto mně to tam bez problému pustí. Jako by
ty oprávnění nefungovala? Kde mohu dělat chybu?
Děkuji moc za případnou radu.
Nastavení v common.neon
# Nastavení společných uživatelských rolí v rámci celé aplikace (ACL).
security:
roles:
guest:
member: [guest]
admin:
services:
authenticator: App\Model\UserManager # Nastavení služby pro přihlašování do aplikace.
security.authorizator: # Nastavení služby pro opravní uživatelů aplikace (ACL).
setup:
# Zdroje aplikace.
- addResource(Error)
- addResource(Homepage)
- addResource(Sign)
- addResource(Administration)
# Pravidla přístupu.
- allow(admin) # Administrátor může všechno.
- allow(guest, Error) # Error stránka "guest"
- allow(guest, Homepage, default) # Přístup na homepage "guest"
- allow(guest, Sign, in) # Přihlášení pro "guest"
- allow(guest, Sign, up) # Registrace pro "guest"
- deny(guest, Administration, default) # Zákaz vstupu do admin části
- allow(member, Administration, default) # Vstup povolen pouze pro přihlášeného
Editoval gizer (1. 4. 2020 10:51)
- gizer
- Člen | 67
Takže jestli jsem to pochopil, tak nastavení v common.neon mně samo o sobě nezakáže přístup například do prezenteru „Adminstration“ a šablony „default“. Musím někde vykonat autorizační dotaz pro toto povolení (nebo zákaz) a jeho výstup (toho dotazu) mně pak přesměruje třeba zpátky na přihlášení ?
- Ages
- Člen | 128
Je to tak jak píšeš, nastavíš tam pravidla pro určitý resource, ale
pak to musíš ještě kontrolovat. Nejjednodušší je to v nějakém
předkovi tvých presenterů.
Nedávno jsem zde konzultoval tuto metodu viz: https://forum.nette.org/…requirements
Místo těch dumpů si nastavíš $resource
dle dané akce a potom
to musíš ještě zkontrolovat
Něco jako:
if ($resource !== null && !$this->user->isAllowed($resource)) {
if ($this->user->isLoggedIn()) {
// ...
} else {
// ...
}
}
Editoval Ages (1. 4. 2020 19:21)
- gizer
- Člen | 67
Vyzkoušel jsem jednoduše toto a zdá se, že to funguje. Pokud nemám oprávnění nastaveno v pravidlech přístupu v common.neon, tak jsem zde přesměrován na homepage. Tento kód je zapsán v předkovi presenterů.
if (!$this->getUser()->isAllowed($this->getName(), $this->getAction())) {
$this->flashMessage('Nemáš oprávnění');
$this->redirect(':Homepage:default');
}
Každopádně moc děkuji za pomoc a za navedení.
Editoval gizer (1. 4. 2020 21:21)