[ADDON] Extended Permission

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

Permission

Popis

Permission je addon nad Nette 2.0, umožnující rozšířit Nette\Permission nejen na skupiny uživatelů, ale i na samotné uživatele. Addon je zatím v ALPHA verzi, bude se updatovat.

Možnosti addonu
  • použití jedinné databázové tabulky k uložení všech permisí
  • rozdělování práv mezi jednotlivé uživatele
  • podporuje i Nette\Security\IAuthorizator
Instalace

Link na BitBucket (ALPHA verze – ve vývoji, bude se často updatovat a měnit)

Stáhněte si addon a rozbalte kamkoliv (stačí, aby ho našel RobotLoader). Přidejte do app/config/config.neon:

parameters:
	phoenix:
		permission:
			authorizator: database
				## je možnost měnit autorizatory

			default: deny
				## má uživatel na začátku vše zakázané nebo povolené? (allow/deny)

			database:
				## konfigurace DatabaseAuthorizatoru

				table: permissions
					## jméno tabulky

				role: user_id
					## sloupec ve kterém jsou role (v tomto případě uživatelé)

				resource: article_id
					## sloupec ve kterém jsou zdroje (např. article32, apod.)

				privilege: privilege
					## sloupec ve kterém jsou práva (např. enum(view, edit, delete))

# a do services:

permission: Phoenix\Permission\Permission(%phoenix%)
Příprava rolí a zdrojů

Všechny role (zdroje) musí implementovat rozhraní Phoenix\Permission\IRole (Phoenix\Permission\IResource). Toto rozhraní má dvě metody:

  • getUniqueId() – vrací unikátní identifikátor pro tuto roli/zdroj (např. id z databáze)
  • getGeneralId() – vrací obecný identifikátor pro tuto roli/zdroj (např. ‚user‘ pro všechny užživatele)

Příklad implementace:

<?php
class User implements Phoenix\Permission\IRole
{
	/** @var int id z databáze */
	protected $id;

	public function getUniqueId()
	{
		return "user".$this->id;
	}

	public function getGeneralId()
	{
		return "user";
	}
}

class Article implements Phoenix\Permission\IResource
{
	/** @var int id z databáze */
	protected $id;

	public function getUniqueId()
	{
		return "article".$this->id;
	}

	public function getGeneralId()
	{
		return "article";
	}
}
?>

Příklad databáze:

table permissions
id|user_id|article_id|privilege
1 | user1 | article2 | edit
1 | user  | article1 | view
1 | user2 | article  | view
1 | user  | article  | delete

Tato tabulka povoluje:

  • uživateli č. 1 editovat článek č. 2
  • všem uživatelům číst článek 1
  • uživateli 2 číst všechny články
  • všem uživatelům mazat všechny články :D

Detailnější popis a podrobnosti někdy sepíšu na BB na wiki.

Editoval greeny (4. 1. 2013 10:35)

David Ďurika
Člen | 328
+
0
-

vyzera to dobre!
posles link na git ? alebo si sa len chcel pochvalit to si spravil aby sme ti zavideli :)

greeny
Člen | 405
+
0
-

Link na BitBucket přidán, ale zatím to není nějaká stable verze :D

enumag
Člen | 2118
+
0
-

Bylo by lepší mít to jako Extension, potom by ty parametry v configu byly jen takhle:

permission:
	authorizator: database
	#...

Něco o tom jak psát extension najdeš na HosipLanově blogu.

Editoval enumag (4. 1. 2013 10:03)