Nejlepší způsob na dynamické acl?

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

Ahoj, chtěl bych se zeptat, jestli někdo neřešil dynamické acl. Napadlo mě to nějak rešit v db, ale to bych asi musel pro každý presenter a action vytvářet zápis v tabulce a to násobit pro každého uživatele. Nejde to nějak lépe?

Martk
Člen | 655
+
0
-

V konfigu jsem udělal seznam zdrojů a akcí. Důvod proč jsem to dal do konfigu? Protože uživatel zdroje a akce nedefinuje, ale jen programátor, takže je to zbytečné uchovávat v databázi, jak s ohledem výkonu, tak i obtížnosti upravování.

acl:
	file:
		- delete
		- edit
		- show
	user:
		- add
		- delete
		- edit

Vznikne ti pole zdroj ⇒ [akce, akce, …] , tohle zobrazím administrátorovi ve formuláři jako multiselect. Zpracování a použití nechám na tobě, snad jsem se trefil do toho co potřebuješ.

CZechBoY
Člen | 3608
+
0
-

Ja to zas ukladam do db. Lip se s tim pracuje a zvladne to i clovek co nezna neon, boji se konfiguraku atd. Navic v appce muzu zobrazit hezci poruseni pravidel, hinty, rychlejsi navigaci na souvisejici nastaveni aj.

Cars Tomas
Člen | 43
+
0
-

Já to mám vše v db a rozdělené takto:

  • accounts (users) mohou být členy x skupin
  • groups (roles) mohou obsahovat x účtů
  • presenters (resources) a ty obsahují privileges

skupinám přiřazuji různé zdroje podle potřeby a to my vytvoří credential, uvnitř credetial mohu dle potřebovy dozapnout povolení pro privileges.

presenters mám anotované @module ⇒ pomocí robot-loaderu si je mohu načíst a přes reflexi vytáhnout seznam funkcní, které mám anotované jako @operations, které slouží jako seznam pro privileges

např.:

<?php

/**
 * @module(Admin:Auth:Groups)
 */
class GroupsPresenter {

	/**
	 * @operation(name="edit", label="upravit")
	 */
	public function actionEdit($id) {
		...
	}

	/**
	 * @operation(name="lock-unlock", label="zamknout / odemknout")
	 */
	public function handleLock($id) {
		...
	}

	/**
	 * @operation(name="lock-unlock", label="zamknout / odemknout")
	 */
	public function handleUnlock($id) {
		...
	}
}
?>