Odhlášení uživatelů po změně oprávnění
- Webster.K
- Člen | 212
Zdravím všechny, chci se zeptat, jak odhlásit uživatele tak, aby se musel znovu přihlásit? Jde o to, že uživateli se změnila uživatelská role, má tedy přístup k jiným věcem, mám otestováno, když uživatel klikne na odhlásit (přes nette jej odhlásím) a znovu se přihlásí, tak se mu již načtou nové věci, nicméně jak vynutit odhlášení když existuje session? Tedy když uživateli změním oprávnění, aby když přijde z kteréhokoliv zařízení, aby viděl rovnou login screen, popř rovnou nové věci?
Editoval Webster.K (26. 7. 2017 16:31)
- David Matějka
- Moderator | 6445
nejlepsi je ukladat do identity jen ID a vzdy vytahnout z db aktualni data
- matopeto
- Člen | 395
Niekde na zaciatku zivotenho cyklu prezentra si vytiahni nove opravnenia. A bude to fungovat automaticky, teda na co pristup nema to nebude mat a na co dostal bude mat. Netreba odhlasovat.
Pokial by si chcel odhlasovat pravdepodobne budes musiet urobit to ze si budes drzat tabulku prihlaseni a po zmene prav z tejto tabulky pre daheho uzivatela zmazat vsetky zaznamy, potom pri overeni zistis ze prihlasenie je neplatne – (id prihlasenia si drzis v session), teda nie je v databaze uzivatela odhlasis
Osobne by som isiel prvou moznostou. Teda preverit ako testujes/cachujes rolu (asi sa ti to nacachuje do session pri prihlaseni do identity a potom uz sa s tym nic nerobi) a pod. a upravil to aby sa to preverovalo pred kazdym requestom. – v session by som drzal iba id uzivatela a vsetko vytahoval vzdy pri kazdom requeste pre neho.
Editoval matopeto (26. 7. 2017 16:37)
- Webster.K
- Člen | 212
Mám nastavení pro role v config.neon souboru, kde má každá role své přiřazené oprávnění na určité věci. Co se uživatele týče, tak jeho role je zapsaná v databázi a v BasePresenteru je funkce startup kde je switch na jednotlivé prezentery, takže v každym tom switchi mám navíc mít třeba podmínku $user->isAllowed(„files“, „view“) a podle toho buď pokračovat v otevření nebo směrovat na třeba homepage/přístupOdepřenPage?
- Webster.K
- Člen | 212
Mám tam toto v BasePresenteru ve funkci startup():
switch ($this->getName()) {
case "Homepage":
if (!$user->isLoggedIn()) {
$this->forward("Sign:in");
}
break;
case "Files":
if (!$user->isLoggedIn()) {
$this->forward("Sign:in");
} else {
if (!$user->isAllowed("files", "view")) {
$this->redirect("Homepage:default");
}
}
break;
default:
break;
}
Nicméně pokud uživatel zůstane přihlášen a já v roli, kterou mám nastaveno takto:
setup:
- addRole('guest')
- addRole('admin','guest')
- addResource('files')
- allow('guest','files','view')
- allow('admin','files','edit')
Když v DB změním uživatele místo guest na admin, tak pořád vidí to samé, tedy jen vše na view, ale neobjeví se tlačítka na edit:
{if $user->isAllowed("files","edit")}BUTTON NA EDITACI{/if}
Stejně tak když otevře uživatel /files aby se pustil presenter ale je v roli Admin, stejně se neukáže editace… a když se odhlásí a znova přihlásí, vše funguje tak jak má, potřebuji eliminovat tu nutnost přihlášení/odhlášení :/ ale nenapadá mě už jak jinak :/
Editoval Webster.K (31. 7. 2017 10:01)