GUI pro dynamické Acl (Access Control List)

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

Nazdárek,

napsal jsem grafické rozhraní pro správu přístupových práv.

  • Podpora pro modulární aplikace (celé GUI je v jednom modulu).
  • Instalace podporuje PostgreSQL nebo MySQL.
  • Přes GUI lze spravovat vše potřebné pro třídu Permission – tj.: privilegia, zdroje, role, uživatele a pravidla přístupů.
  • Podpora pro stromové struktury (role, zdroje).
  • Obsahuje ukázkovou aplikaci.
  • Popis instalace je součástí archivu.

Screenshots: Obr 1, Obr 2

Ocenil bych jakoukoliv kritiku, nápady, připomínky, dotazy.

Stránce s doplňkem: GUI for Acl
Download: GUI for Acl
Aktuální verze: 2.0

Testováno na:
PHP: 5.3.5
Apache: 2.2.17
Nette Framework: 2.0.4

S pozdravem
Bernard

Editoval Bernard Williams (21. 5. 2013 23:02)

pekelnik
Člen | 462
+
0
-

sfGuard pro Nette se začíná líhnout :)

Patrik Votoček
Člen | 2221
+
0
-

jelikož se jedná o GUI možná by se hodil screenshot… :-)

BigCharlie
Člen | 283
+
0
-

Tak se přimlouvám za screenshot, protože při snaze o vyzkoušení mě zastavila hláška Resource 'ceska_sporitelna' does not exist.. A při letmém nahlédnutí do kódu demonstrační stránky se mi nechce definovat tolik zdrojů :-(

Nebo funkční demo?

Cifro
Člen | 245
+
0
-

V DB v tabuľke gui_users si treba zmeniť heslo pre admina, pomocou md5(nove heslo), lebo nikde nie je zmienené aké je heslo…

A login je na /gui-for-acl-1.0/document_root/front/login/. Po prihlasení to zase presmeruje na Front:Default:Default a vyhodí tú Excpetion ale stačí zmeniť url napr. na /gui-for-acl-1.0/document_root/acl/users/ a ste tam.

Bernard Williams
Člen | 207
+
0
-

Hodil jsem na web nějaké náhledy – viz. první post.

Do archivu jsem zapomněl přidat dump databáze pro demo stránku – omlouvám se. Teď už to dump obsahuje (PostgreSQL/MySQL), proto stahujte – odkaz viz. první post.

Cifro napsal(a):

V DB v tabuľke gui_users si treba zmeniť heslo pre admina, pomocou md5(nove heslo), lebo nikde nie je zmienené aké je heslo…

Hesla jsou stejné jako jméno – tj. pro uživatele Admin je nastavené heslo Admin. Tohle je napsané na demonstrační stránce, ale protože jste neměli DB data, tak to házelo chybu o neexistujících zdrojích atd.

Cifro napsal(a):

A login je na /gui-for-acl-1.0/document_root/front/login/. Po prihlasení to zase presmeruje na Front:Default:Default a vyhodí tú Excpetion ale stačí zmeniť url napr. na /gui-for-acl-1.0/document_root/acl/users/ a ste tam.

Divné.. Tohle se mi nestalo a to jsem to teď zkoušel nově instalovat. Zkus si to znovu stáhnout a importovat demo DB.

Cifro
Člen | 245
+
0
-

Už je to OK :)

Len… v config.ini je zlá voľba database.dbname a má byť database.database, a nezabudnite si zmeniť driver v configu, importol som mysql a papuľovalo že nemam pgdriver :D

Zabudol som poďakovať za toto GUI for ACL, určite pomôže, vďaka :)

Editoval Cifro (20. 4. 2010 13:17)

Bernard Williams
Člen | 207
+
0
-

Cifro napsal(a):
Len… v config.ini je zlá voľba database.dbname a má byť database.database, a nezabudnite si zmeniť driver v configu, importol som mysql a papuľovalo že nemam pgdriver :D

Zabudol som poďakovať za toto GUI for ACL, určite pomôže, vďaka :)

No ono to ani tak není „zlá voľba“. V PostgreSQL funguje dbname a v MySQL zase database. Nevím jak je to v nových verzích dibi, ale v té mé to musím rozlišovat.

Jakub Šulák
Člen | 222
+
0
-

Možná trochu „povrchní“ připomínka, ale…

Začínají se tvořit komponenty s „tváří“. To je super, ale trochu mě mrzí jedna věc – ke každé použité komponentě je nutné nakopírovat X obrázků/ikon, Y javascriptů, apod.
Samozřejmě, mohu si komponentu přepsat (template), na své ikony, apod. – ale to je práce navíc.

Osobně bych možná otevřel debatu nad tím, zda nepoužívat nějaké UI pro komponenty. Nový „Falešný datagrid“ již začal – používa Jquery UI.

Výhodu spatřuji v:

  • není nutné pro každou komponentu kopírovat „její ikony“
  • komponenty jsou si podobné
  • jednoduše mohu změnit styl celé aplikace (všech komponent), změnou tématu, nebo napsáním vlastního
Etch
Člen | 403
+
0
-

Bylo by potřeba aby si tam dořešil mazání uzlů a úklid v db.

  1. Pokud smažeš třeba resource tak by se měla uklidit tabulka „gui_acl“, aby tam nezůstávaly nesmyslné (nepotřebné) řádky.
  2. Mazání uzlů je dost dobře nepoužitelné, protože se nesmažou potomci. Bylo by tedy potřeba dodělat smazání všech potomků při mazání uzlů ať již rekurzí či jiným mechanismem.

EDIT: Dále by bylo možná dobré používat modely.

Editoval Etch (22. 4. 2010 12:28)

Bernard Williams
Člen | 207
+
0
-

Etch napsal(a):

Bylo by potřeba aby si tam dořešil mazání uzlů a úklid v db.

  1. Pokud smažeš třeba resource tak by se měla uklidit tabulka „gui_acl“, aby tam nezůstávaly nesmyslné (nepotřebné) řádky.
  2. Mazání uzlů je dost dobře nepoužitelné, protože se nesmažou potomci. Bylo by tedy potřeba dodělat smazání všech potomků při mazání uzlů ať již rekurzí či jiným mechanizmem.

V PostgreSQL mi tohle hlídají cizí klíče, takže tohle dořešené mám. Ty nejspíš používáš MySQL, když ti to nejde. Je pravda, že tam jsem ty cizí klíče neexportoval, protože si nejsem úplně jistý o jejich funčnosti (jestli to funguje stejně jako v PostgreSQL).

Etch
Člen | 403
+
0
-

Předpokládal sem, že to v PgSQL budeš mít udělané přes cizí klíče. Ale pokud to tak je tak nechápu proč si pro mysql nepoužil InnoDB, ale MyISAM. Proto sem také psal „vyřešit jiným mechanismem“.

EDIT: Typo

Editoval Etch (22. 4. 2010 12:28)

Bernard Williams
Člen | 207
+
0
-

Já primárně dělám v PostgreSQL. Do MySQL jsem to exportoval jen kvůli komunitě.

Teď jsem na to koukal do dokumentace a cizí klíče fungují opravdu jen v InnoDB, což je možná důvod, proč mi doma nefungovaly. Hned jak bude chvilka, tak to převedu na InnoDB a cizí klíče dodám.

Honza Kuchař
Člen | 1662
+
0
-

Vypadá to hodně dobře. Nechceš to přidat do extras? Ať je to na jednom místě.

Bernard Williams
Člen | 207
+
0
-

Etch napsal(a):

Předpokládal sem, že to v PgSQL budeš mít udělané přes cizí klíče. Ale pokud to tak je tak nechápu proč si pro mysql nepoužil InnoDB, ale MyISAM. Proto sem také psal „vyřešit jiným mechanismem“.

Tak jsem to převedl do InnoDB a vložil cizí klíče. Změny jsou už v archivu, takže si to můžeš stáhnout.

honzakuchar napsal(a):

Vypadá to hodně dobře. Nechceš to přidat do extras? Ať je to na jednom místě.

Ještě bych rád počkal na nějaké další odezvy a pak to tam hodím.

Bernard Williams
Člen | 207
+
0
-

Mám asi hloupou otázku, ale potřeboval bych poradit, jak mohu přidat nějaký projekt do Google Code. Nikde tam nevidím žádný odkaz.. Nebo je to jen pro „vyvolené“? Rád bych tam umístil tento doplněk. Díky

wopice
Člen | 21
+
0
-

Bernard Williams napsal(a):

Mám asi hloupou otázku, ale potřeboval bych poradit, jak mohu přidat nějaký projekt do Google Code. Nikde tam nevidím žádný odkaz.. Nebo je to jen pro „vyvolené“? Rád bych tam umístil tento doplněk. Díky

http://code.google.com/…reateProject

Bernard Williams
Člen | 207
+
0
-

wopice napsal(a):

http://code.google.com/…reateProject

Díky, to jsem přesně hledal.

honzakuchar napsal(a):

Vypadá to hodně dobře. Nechceš to přidat do extras? Ať je to na jednom místě.

Je to tam. Je to má první stránka tady na wiki, takže kdyby ji chtěl kdokoliv upravit, doplnit, tak jen směle do toho :-)

Editoval Bernard Williams (30. 4. 2010 18:56)

Honza Kuchař
Člen | 1662
+
0
-

Ještě bych tam doplnil, pro kterou veri PHP to je.

Bernard Williams
Člen | 207
+
0
-

honzakuchar napsal(a):

Ještě bych tam doplnil, pro kterou veri PHP to je.

Ta by měla být dána verzí Nette. Samotná aplikace nevyužívá nic speciálního z PHP.

hrach
Člen | 1836
+
0
-

bylo (asi) myšleno jestli PHP 5.2 nebo 5.3…(namespace)

Editoval hrach (2. 5. 2010 21:05)

Bernard Williams
Člen | 207
+
0
-

hrach napsal(a):

bylo (asi) myšleno jestli PHP 5.2 nebo 5.3…(namespace)

To mě napadlo, a proto jsem taky uvedl, že samotná aplikace nevyužívá nic speciálního (jako např. namespace).. Ale abych to nějak uzavřel, tak aplikaci jsem psal pod PHP 5.2. Na PHP 5.3 jsem to netestoval.

ic
Člen | 430
+
0
-

v souboru app/AclModule/presenters/PermissionPresenter.php je na řádku 198 zatoulaný napevno zadaný název tabulky

$rows = dibi::fetchAll('SELECT id, name FROM [gui_acl_privileges] ORDER BY name;');

jiného místa kde se názvy tabulek nedosazují jsem si nevšiml.

Bernard Williams
Člen | 207
+
0
-

@ic: Díky. Hned jak bude čas, tak to opravím v nové verzi.

sin
Člen | 82
+
0
-

Pro demo na mysql je potřeba přidat následující řádek, jinak to pise „No database selected“

database.database = gui-for-acl

Bernard Williams
Člen | 207
+
0
-

@sin: Tohle je popsáno v souboru install.cs.txt uvnitř archivu. PostgreSQL používá dbname, ale MySQL database.

Bernard Williams
Člen | 207
+
0
-

lopikol: Můžeš to použít jako již kompletní administraci pro ACL. Rozšíření je nutné pouze v případě speciálních požadavků.

roarbb
Člen | 29
+
0
-

Funguje to super, dakujem :) Mam len jeden maly problem. Potreboval by som aplikaciu spustat z rootu, teda premiestnit index.php z „/document_root“ do „/“. Prepisal som v indexe cestu k WWW_DIR. Teraz vsak nefunguje http:/ /localhost/moja_aplikacia/front/login/. Hlasi 404 :/

Dakujem za kazdu radu zaciatocnikovi.

Editoval roarbb (12. 4. 2011 21:08)

Bernard Williams
Člen | 207
+
0
-

roarbb: Konstantu WWW_DIR nech beze změny – ta se určí sama podle umístění souboru index.php. Z konstant APP_DIR a LIBS_DIR* odstraň „../“ a mělo by to vše jít. Pro jistotu si ještě smaž obsah složky temp.

thool
Člen | 6
+
0
-

Po debugovacím maratonu se mi podařilo tento plugin rozjet na nette 2.0-beta :-)

Jde nějak nastavit pravidlo:
nejaka_role – nejaky_resource – ALL

Abych to nemusel otrocky vypisovat?

Bernard Williams
Člen | 207
+
0
-

V sekci Permission bys měl mít v MultiSelectu možnost „- All resources -“ a „- All privileges -“.

thool
Člen | 6
+
0
-

:) No tak potom není co řešit.

mimochodem soubor PermissionPresenter.php line 83 – tabulka TABLE_PRIVILEGES je tam hardcoded, hodilo by se spíš

$rows = dibi::fetchAll('SELECT id, name FROM ['.TABLE_PRIVILEGES.'] ORDER BY name;');

Jinak dobrá práce tohle ACL GUI, díky.

Editoval thool (18. 8. 2011 21:40)

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

aktualizoval jsem svůj doplněk pro PHP 5.3. a Nette 2. Taky jsem odstranil nějaké chyby a nedostatky. Než jej ale oficiálně „vydám“, tak bych byl rád, kdyby jste jej odzkoušeli na různých verzích Nette – já to testoval na Nette 2.0.4.

Novou verzi doplňku si můžete stáhnout zde: GUI for Acl 2.0

Bernard

sepo
Člen | 69
+
0
-

PHP 5.4.9
IIS 7.5
Nette 2.0.8

zatiaľ to beží v poriadku

Prokop
Člen | 31
+
0
-

Měl bych jednu úpravu/nápad.
Jak by se řešilo upravení přístupu do ACL abych jako např. uživatel s právy Informačního technika(viz.Demo) mohl přidělovat role níže postaveným rolím (dle Dema = Administrátor a IT technik).
Abych jakožto vedoucí mohl tyto role rozdělovat/měnit.

Add1: Abych jako tento „podřadnější“ uživatel neviděl ty ostatní v jiné větvi + mně nadřazenou roli.

Už to někdo řešil? :)

Jinak hodně díky za addon, konečně jsem někde našel jak vhodně spravovat role přes db a i nástroj k tomu. +1 :)

Editoval Prokop (25. 3. 2013 0:43)

Bernard Williams
Člen | 207
+
0
-

2 Prokop: Asi by sis musel implementovat vlastní metodu isAllowed, kde budeš zohledňovat váhu/oprávnění jednotlivých rolí a pokud bude vyšší, tak vrátíš FALSE a pokud nižší, tak vrátíš parent::isAllowed.

piskotek
Člen | 32
+
0
-

ahoj,
poradil by mi někdo, jak do tohoto ACL vměstnat kontrolu toho zda je uživatel vlastníkem článku, fotky atd. a aby měl právo editovat, mazat

Bernard Williams
Člen | 207
+
0
-

2 piskotek: Stejný případ jako u uživatele Prokop. Nejjednodušší by asi bylo rozšířit/doplnit metodu isAllowed ve třídě PermissionModel. Jednoduchý nástřel:

	public function isAllowed($role, $resource, $privilege) {
		if (!$isAuthor)
			return false;
		else
			return parent::isAllowed($role, $resource, $privilege);
	}

Samozřejmě místo proměnné $isAuthor si doplň vlastní rozhodovací logiku. Nejspíš budeš muset třídě PermissionModel předávat objekt s uživatelem.

Editoval Bernard Williams (21. 5. 2013 22:59)

chap
Člen | 81
+
0
-

Ahoj, chtěl bych se zeptat, zda není v plánu update k nové verzi Nette. Ve 2.1.0 je problém s deprecated funkcí table v třídě Connection. Nerad bych do doplňku zasahoval :) Díky

Bernard Williams
Člen | 207
+
0
-

Zdravím, aktuálně to bohužel v plánu není a to z časové vytíženosti.

akadlec
Člen | 1326
+
0
-

@chap: co ti brání do doplňku zasáhnout? Pak své modifikace pošleš na git a autorovi a dalším ušetříš práci ;)