Role a Oprávnění pro zobrazení položek Menu
- Joacim
- Člen | 229
Mám model (zde z fora), kde si přidávám role, práva atd
namespace App\Model;
use Nette\Security\Permission;
class AuthorizatorFactory {
/**
* @return \Nette\Security\IAuthorizator
*/
public function create() {
$permission = new Permission();
/* seznam uživatelských rolí */
$permission->addRole('user');
$permission->addRole('admin', 'user');
/* seznam zdrojů */
$permission->addResource('Dashboard');
$permission->addResource('Reservations');
$permission->addResource('Setup');
$permission->addResource('Workflow');
/* seznam pravidel oprávnění */
$permission->allow('user', array('Dashboard', 'Reservations'), 'list');
//...
/* admin má práva na všechno */
$permission->allow('admin', Permission::ALL, Permission::ALL);
return $permission;
}
}
do config.neon jsem umístil toto
services:
authorizatorFactory: App\Model\AuthorizatorFactory
authorizator: @authorizatorFactory::create
Dostanu hlášku Fatal Error Call to undefined function App\Model\AuthorizatorFactory()
Instanci AuthorizatorFactory vytvářím v modelu SecurityManager
namespace App\Model;
use Nette;
class SecurityManager extends Nette\Object implements Nette\Security\IAuthenticator {
/**
* Performs an authentication.
* @return Nette\Security\Identity
* @throws Nette\Security\AuthenticationException
*/
public function authenticate(array $credentials) {
$acl = AuthorizatorFactory();
$oradb = new OracleDatabase($userInfo->persNo);
// __construct( mixed $id, mixed $roles = NULL, array $data = NULL )
return new Nette\Security\Identity($userName, $userInfo->role, array("userId" => $userInfo->id));
}
}
Zajímá mě:
- jak generovat menu dle práv, aby po přihlášení admin viděl všechny položky menu, ale user jen svoje 2 ?
- co dělám špatně v config.neon, že dostávám hlášku fatal error
- kde vytvořit instanci AuthorizatorFactory, abych s ní mohl pracovat v každém prezenteru (či pracovat jiným pro mě neznámým způsobem)
- je velká prasárna používat pro Oracle přímo OCI (oci_connect), když PDO_OCI nefunguje PDOException #IM001 SQLSTATE[IM001]: Driver does not support this function: driver doesn't support meta data
Query pro Oracle DB vyhazující error
$oradb = new Context($connection);
$this->template->sysdate = $oradb->table('DUAL')
->select('SYSDATE')
->fetchAll();
Děkuji všem dobrým duším
- David Matějka
- Moderator | 6445
@Lexi ani to mu tam nechybi, cely radek
$acl = AuthorizatorFactory();
prebyva :)
- David Matějka
- Moderator | 6445
jak generovat menu dle práv, aby po přihlášení admin viděl všechny položky menu, ale user jen svoje 2 ?
$user->isAllowed('article', 'edit')
$user
je dostupny v sablone, v presenteru se k tomu dostanes
pres $this->user
co dělám špatně v config.neon, že dostávám hlášku fatal error
v config.neon asi nic, ale jak pisu v komentari vedle, prebyva
tam $acl = AuthorizatorFactory();
kde vytvořit instanci AuthorizatorFactory, abych s ní mohl pracovat v každém prezenteru (či pracovat jiným pro mě neznámým způsobem)
nikde, o to se postara nette. Vytvori authorizatorFactory pro vytvoreni authorizatoru a ten se pak preda userovy. Pak s tim budes moci pracovat, jak jsem psal vyse.
- Joacim
- Člen | 229
Díky všem za komentáře, včera jsem si toho, že mi chybí při vytváření instance new nevšimnul, ale podle toho co jsem pochopil, jsem smazal instanci a používám $user isAllowed a isInRole.
Ještě by mě zajímalo jak mám zamezit(přesměrovat), nějakým hezkým způsobem, přímé zadání url na které uživatel nemá roly/právo, nechci se všude ptát jestli není uživatel admin přesměruj na default
Editoval Joacim (1. 4. 2015 10:09)