Role a Oprávnění pro zobrazení položek Menu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Joacim
Člen | 229
+
0
-

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

Jan Endel
Člen | 1016
+
-1
-

chybí ti new.

$acl = new AuthorizatorFactory();
Jan Mikeš
Člen | 771
+
0
-

Nechybí, chybí mu tam ->create()

David Matějka
Moderator | 6445
+
0
-

@Lexi ani to mu tam nechybi, cely radek $acl = AuthorizatorFactory(); prebyva :)

David Matějka
Moderator | 6445
+
+1
-

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
+
0
-

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)