Autentizace/autorizace v modularní aplikaci
- richie
- Člen | 1
zdravim.. potřeboval bych poradit ohledně přihlašování a autorizace
v aplikaci, která je rozdělena do modulů Admin a Front. Chci se
přihlašovat do každého modulu odděleně (každý modul má svůj
speciální autentizátor).
Celá app: https://github.com/…e/master/app
Autentizaci mám řešenou takto:
/app/config/config.neon
services:
security.frontAuthenticator: App\FrontModule\Components\FrontAuthenticator
security.adminAuthenticator: App\AdminModule\Components\AdminAuthenticator
app\AdminModule\components\AdminAuthenticator.php
<?php
public function login($form, $instructions, $register = false)
{
...
$username = $form->getValues()->user_name;
$password = $form->getValues()->pass;
$this->user->getStorage()->setNamespace('Admin');
$this->user->login(new Security\Identity($row[self::COLUMN_ID], $this->roleManager->getRolesByUser($row[self::COLUMN_ID], 'Admin')->fetchPairs('role_id', 'role_title'), $arr));
...
}
?>
app\AdminModule\presenters\AdminBasePresenter.php
<?php
abstract class AdminBasePresenter extends BasePresenter
{
...
protected function startup()
{
parent::startup();
$this->user = parent::getUser();
$this->user->getStorage()->setNamespace('Admin');
}
...
}
?>
Stejným způsobem mám řešený front modul..
Autorizaci mám společnou pro oba moduly.
/app/config/config.neon
services:
security.authorizatorFactory: App\Components\Authorizator
security.authorizator: @security.authorizatorFactory::create
app\components\Authorizator.php
<?php
public function create()
{
//userStorage je instance IUserStorage
$identity = $this->userStorage->getIdentity();
//dump($identity);exit;
$permission = new Permission();
if(!$identity)
return $permission;
# ROLES
...
# RESOURCES
...
# ACL
...
return $permission;
}
?>
Problém je v tom, že pokud nastavím namespace při přihlášení, v autorizátoru mi tato metoda vrací null:
$this-›userStorage-›getIdentity()
..když to nastavení namespace při přihlašování (a v basePresenterech)
zakomentuju, pak mi ta metoda normálně vrací identitu přihlášeného
uživatele.
Role a následně jejich zdroje a oprávnění chci v autorizátoru vytvářet
na základě přihlášeného uživatele, tak se tam bez té identity neobejdu.
Taky by se hodilo nějak získat v autorizátoru namespace modulu, z kterého
přišel požadavek na autorizaci. Nevěděl by prosím někdo co s tím?
Editoval richie (24. 6. 2016 17:17)