ACL remove resource za běhu

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

Dobrý den,

chci se zeptat jak řešíte removeResource z ACL za běhu aplikace?

Netuším jak přistoupit za běhu k ACL. Jestli k tomu mám přistoupit např. ze Secured presenteru nějak tímto způsobem

<?php
$this->user->authorizator-> ??
?>

nebo musím přistupovat přímo ve třídě My_Authorizator. Ale pak netuším jak tam injectnout třídu User – Circular reference detected for services: application.17, security.user, authorizator. Musím zjistit jestli je firma přihlášeného uživatele aktivní a v případě že ne, zobrazit mu pouze homepage.

Zjednodušil jsem Authorizator pro ukázku:

<?php

/**
 * Class responsible for authorizing members and controlling access
 * to application resources.
 */
class My_Authorizator extends Nette\Object implements Nette\Security\IAuthorizator
{
	/** @var User */
	// protected $user;


	/**
     * bohuzel nelze injectnout
	 * @param User $user
	 */
	/*public function __construct(
		User $user
	) {
		$this->user = $user;
	}*/



	/**
	 * @param $role
	 * @param $resource
	 * @param $privilege
	 * @return bool
	 */
	function isAllowed($role, $resource, $privilege)
	{
		$acl = new Permission();

		// User roles
		$acl->addRole('login');
		$acl->addRole('seller', 'login');
		$acl->addRole('admin', 'seller');

		// Application resources
		$acl->addResource('homepage');
		$acl->addResource('clients');



		/**
		 * options [ read, add, edit, delete ]
		 */

		// login
		$acl->allow('login', 'homepage', array('read'));

		// seller
		$acl->allow('seller', 'clients', array('read', 'add', 'edit'));

		// admin
		$acl->allow('admin', Permission::ALL, Permission::ALL);

		return $acl->isAllowed($role, $resource, $privilege);
	}

}

?>

Děkuji

David Matějka
Moderator | 6445
+
+1
-

Mas to reseny pomerne nestastne, radeji si na authorizator udelej factory (hledej na foru AuthorizatorFactory)

Phalanx
Člen | 310
+
0
-

Díky Davide, vycházel jsem z dokumentace https://doc.nette.org/…thentication

Kdykoliv za běhu aplikace můžeme i odebrat roli metodou removeRole(), zdroj odebere removeResource(), pravidlo removeAllow() nebo removeDeny().

Takže jsem očekával, že to mám úplně blbě a existuje mnohem jednodušší řešení než Factory s nutností odstranění cyklické závislosti.

https://forum.nette.org/…zace-pouziti#…
https://forum.nette.org/…ho-uzivatele