[ADDON] Extended Permission
- greeny
- Člen | 405
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
vyzera to dobre!
posles link na git ? alebo si sa len chcel pochvalit to si spravil aby sme ti
zavideli :)
- enumag
- Člen | 2118
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)