Nastavení ACL skrz config.neon a změna pořadí parametrů u funkce isAllowed

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

Ahoj, v čistém nette/web-project (Nette 2.3.4) si hraji v HomepagePresenteru:

<?php

namespace App\Presenters;

use Nette;


class HomepagePresenter extends Nette\Application\UI\Presenter
{


	public function renderDefault()
	{

		$acl = new Nette\Security\Permission;

		$acl->addRole('guest');
		$acl->addResource('article');
		$acl->allow('guest', 'article');


		dump($acl->isAllowed('guest', 'article'));
		// vrací TRUE

		// Zakomentuji dump výše a v následujícím
		// prohodím pořadí 'guest' a 'article':
	//	dump($acl->isAllowed('article', 'guest'));
		// Vyhodí se výjimka Nette\InvalidStateException
		// Role 'article' does not exist. Tomu rozumím.

	}

}

?>

Vrátím nette/web-project do původního stavu a zkusím nastavit ACL skrz config.neon. Přidám:

services:
	router: App\RouterFactory::createRouter

	authorizator:
		class: Nette\Security\Permission
		setup:
			- addRole('guest')
			- addResource('article')
			- allow('guest', 'article')

a opět upravuji HomepagePresenter:

<?php

namespace App\Presenters;

use Nette;


class HomepagePresenter extends Nette\Application\UI\Presenter
{


	public function renderDefault()
	{
		// Př.1
		// Tohle nechápu. Při pořadí 'role', 'zdroj':
		dump($this->user->isAllowed( 'guest', 'article'));
		// se vyhodí:
		// Nette\InvalidStateException
		// Resource 'guest' does not exist.
		// Nemělo by se vrátit TRUE?


		// Př. 2
		// Zakomentuji dump výše.
		// Při pořadí 'zdroj', 'role':
	//	dump($this->user->isAllowed('article', 'guest'));
		// Se vrátí TRUE.
		// Neměla by se tady vrátit výjimka
		// Nette\InvalidStateException
		// Role 'article' does not exist.

	}

}

?>

V konfigurátoru se generuje

<?php

	/**
	 * @return Nette\Security\Permission
	 */
	public function createServiceAuthorizator()
	{
		$service = new Nette\Security\Permission;
		$service->addRole('guest');
		$service->addResource('article');
		$service->allow('guest', 'article');
		return $service;
	}

?>

Jsou ty parametry na výstupu funkce isAllowed při konfiguraci skrz config.neon přehozené nebo mi něco uniká? Předem díky za odpověď.

Editoval buffus (9. 8. 2015 1:07)

David Matějka
Moderator | 6445
+
+1
-

tady nejde o to, jak to konfigurujes, ale nad cim volas isAllowed. v prvnim pripade nad authorizatorem, ktery prijima jako prvni parametr roli. V druhem pripade to volas nad userem, ktery roli nevyzaduje, jelikoz zna roli aktualne prihlaseneho uzivatele a isAllowed pote deleguje na autorizator.

enumag
Člen | 2118
+
+2
-

User::isAllowed()jiné parametry než Permission::isAllowed().