Problém s polem rolí při přechodu na Nette3.x Exception Role ‚admin,superadmin‘ does not exist
- Kyo
- Člen | 4
Dobrý den,
po migraci na Nette 3.1 mám problém s více rolemi a vrací mi to Nette\InvalidStateException Role ‚admin,superadmin‘ does not exist.
Pokud je v DB uvedena pouze jedna role, např. superadmin
, vše
je v pořádku. Jakmile jsou ale role uvedeny dvě a více, obdržím
zmíněnou exception.
Zkoušel jsem PHP verzi 7.2 i 7.4. Zkoušel jsem pole rolí uvádět v DB
i ve formátu [admin,superadmin]
nebo
['admin','superadmin']
, také bez úspěchu.
Vypadá to, jako by funkce isAllowed
neuměla rozdělit string
z DB na jednotlivé role.
DB tabulka „users“ sloupec „role“
admin,superadmin
BasePresenter.php
if($this->user->isAllowed('crm', 'view')) {...
common.neon
- addRole('admin')
- addRole('superadmin')
- addResource('crm')
- allow('admin', 'crm', [view])
- allow('superadmin', 'crm', [view])
composer.json
"nette/application": "^3.1",
"nette/database": "^3.1",
"nette/security": "^3.1",
Můžete mi, prosím, poradit, jak na to? Děkuji.
Editoval Kyo (22. 2. 2022 2:16)
- Ozzrel
- Generous Backer | 54
Ahoj, no jestli vycházíš z Sandboxu tak tam to jde řešit asi tak v UserFacade.php řádek 65 kde se přidá explode()
return new Nette\Security\Identity($row[self::COLUMN_ID], explode(',',$row[self::COLUMN_ROLE]), $arr);
Nebo tak nějak podobně to bude i u tebe.
- Kyo
- Člen | 4
Děkuji! Skutečně to bylo tím explode, pomohlo to.
public function authenticate(string $email, string $password): IIdentity
{
$row = $this->database->table('users')
->where('email', $email)
->fetch();
if (!$row) {
throw new Nette\Security\AuthenticationException('Nesprávně zadaný e-mail.');
}
if (!$this->passwords->verify($password, $row->password)) {
throw new Nette\Security\AuthenticationException('Heslo není správné.');
}
/* Původní kód
return new Nette\Security\Identity(
$row->id,
$row->role), // or array of roles
$row
);
*/
/* Nový kód*/
$arr = $row->toArray();
unset($arr->password);
return new Nette\Security\Identity($row->id, explode(',',$row->role), $arr);
}
Editoval Kyo (22. 2. 2022 23:33)