login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[ZF] Beginners help voor zend_acl

Offline DriesA - 09/03/2011 10:06
Avatar van DriesALid Hoi,

Ik zou graag zend_acl willen gebruiken in mijn applicatie maar weet niet goed waar te beginnen. Aangezien ik nog maar net zend framework aan het gebruiken ben kan ik er nog niet helemaal aan uit waar ik wat moet zetten.

Wat ik zou willen bereiken is het volgende:
Momenteel heb ik 4 rollen (admin, chef, medewerker, bezoeker).
In mijn index-controller controleer ik welke rol de gebruiker heeft en stuur ik ze door naar de bijhorende controller (admincontroller, chefcontroller, medewerkercontroller) behalve bezoeker.
Bezoeker mag enkel toegang krijgen tot de indexcontroller (waar mijn login en registratiefuncties in verwerkt zitten).

Het zou redelijk simpel moeten zijn om elke rol maar toegang te bieden aan zijn bijhorende controller (met inheritance). Ma.w.:
medewerker krijgt toegang tot medewerkercontroller
chef krijgt toegang tot medewerker- en chefcontroller
admin krijgt toegang tot admin-, chef- en medewerkercontroller
Hoe ik dit moet doen, snap ik min of meer nog wel, en dat ik dan aan het begin van elke functie een controle doe of de gebruikersrol toegang heeft tot die bepaalde actie of controller, kan er ook nog bij.

Maar wat ik niet direct kan vinden is:
- Waar moet mijn definitie komen van mijn rollen en recourses (welke file en in welke map)
- Vraag ik in mijn bootstrap of index-controller de acl op en bewaar ik hem best in een namespace of vraag ik hem best telkens opnieuw op?

Of bekijk ik het helemaal verkeerd?
Alvast bedankt.

10 antwoorden

Gesponsorde links
Offline Realtec - 09/03/2011 10:21
Avatar van Realtec HTML interesse Ik neem aan dat je je login authentication al gemaakt hebt met Zend_Auth?
Al ben ik zelf ook nog aan het uitzoeken hoe ik acl het beste kan gebruiken maar heb nog wel een leukt tut.

http://www.zend...cl/2009/06/
http://www.zend...on/2009/06/
Bedankt door: DriesA
Offline DriesA - 10/03/2011 13:32 (laatste wijziging 10/03/2011 19:38)
Avatar van DriesA Lid Bedankt Realtec,

Die tutorial heeft me weeral iets verder gebracht, heb het gisteren eens bekeken en geprobeerd maar zit nog een beetje vast. Heb op youtube ook nog een tutorial gevonden en heb nu een ACL die volgens mij moet werken, moet nu enkel nog zien dat ik de plugin correct kan registreren en daar zit ik terug met het probleem.

Heb volgende acl in /application/models/libraryAcl.php:
Plaatscode: 140789

Kan er iemand me (liefst stap-voor-stap) zeggen hoe ik dit als plugin kan registreren?

Alvast bedankt.
Bedankt door: Stijn
Offline Realtec - 10/03/2011 20:14
Avatar van Realtec HTML interesse Volgens mij kun je dat het beste in de config (ini) file zetten.

  1. resources.frontController.plugins.AclPlugin = "My_Plugin_LibraryAcl"


Dan zou ik hem in je eigen namespace zetten en dan andere class name gebruiken.

Path: library/My/Plugin/LibraryAcl.php
Classname: My_Plugin_LibraryAcl

En dan moet je nog een custom namespace registreren:
  1. autoloaderNamespaces[] = "My"
Offline DriesA - 11/03/2011 22:01
Avatar van DriesA Lid Hey,

Bedankt voor je uitleg Realtec, heb dit geprobeerd maar als ik de autoloaderNamespaces in mijn index.php plaats, krijg ik als melding "unexpected '[' ...".
Als ik die regel probeer in mijn application.ini te plaatsen, krijg ik:

Catchable fatal error: Argument 1 passed to Zend_Controller_Front::registerPlugin() must be an instance of Zend_Controller_Plugin_Abstract, instance of Abes_Plugin_LibraryAcl given, called in C:\xampp\htdocs\abes\library\Zend\Application\Resource\Frontcontroller.php on line 118 and defined in C:\xampp\htdocs\abes\library\Zend\Controller\Front.php on line 731

Enig idee?
Offline MiST - 12/03/2011 03:07
Avatar van MiST Lid Ik denk dat je plugin geen Zend_Controller_Plugin_Abstract extend ;)
Offline DriesA - 12/03/2011 10:05
Avatar van DriesA Lid Was inderdaad het probleem, maar als ik dan mijn libraryAcl extend van Zend_Controller_Plugin_Abstract, krijg ik:

Call to undefined method Abes_Plugin_LibraryAcl::add()

wanneer ik mijn eerste resource wil toevoegen.
Offline lemoinet - 12/03/2011 14:35
Avatar van lemoinet PHP gevorderde ik gebruik momenteel dit voor mijn acl
  1. <?php
  2. //TODO REWRITE
  3. namespace App\Controller\Plugin
  4. {
  5. class MyAcl extends \Zend_Controller_Plugin_Abstract
  6. {
  7. private $_auth;
  8. private $_acl;
  9.  
  10. public function __construct()
  11. {
  12. $this->_acl = new \Zend_Acl();
  13. $this->_auth = \Zend_Auth::getInstance();
  14.  
  15. $this->_acl->addRole(new \Zend_Acl_Role('guest'))
  16. ->addRole(new \Zend_Acl_Role('admin'), 'guest');
  17.  
  18. $this->_acl->addResource(new \Zend_Acl_Resource('default'));
  19. $this->_acl->addResource(new \Zend_Acl_Resource('library'));
  20. $this->_acl->addResource(new \Zend_Acl_Resource('forum'));
  21.  
  22. $this->_acl->allow('guest', 'default');
  23. $this->_acl->allow('guest', 'library');
  24. $this->_acl->allow('guest', 'forum');
  25. }
  26.  
  27. public function preDispatch(\Zend_Controller_Request_Abstract $request)
  28. {
  29. $identity = $this->_auth->getIdentity();
  30. $role = null ? $identity->getRole() : 'guest';
  31.  
  32. $resource = $request->module;
  33.  
  34. if (!$this->_acl->has($resource))
  35. $resource = null;
  36.  
  37. if (!$this->_acl->isAllowed($role, $resource))
  38. {
  39. $request->setModuleName('default')
  40. ->setControllerName('index')
  41. ->setActionName('index');
  42. }
  43.  
  44. \Zend_Layout::getMvcInstance()->getView()->user = $identity;
  45. }
  46. }
  47. }
Offline MiST - 12/03/2011 18:55
Avatar van MiST Lid Je hoeft geen accolades omheen je namespace te zetten hoor. Je kan dat beter beschouwen als een soort package statement in Java oid.

Voor de rest moet je in gedachten houden dat ZF1 nog niet namespaced is en veel onderdelen kunnen niet overweg met namespaces. Ik raad dus aan om momenteel nog even de oude namespacing (met underscores) te gebruiken.

De constructor vind ik een beetje tricky. Ik heb geen idee waar ergens je pluginobject wordt aangemaakt en wat er dan reeds allemaal beschikbaar is. Misschien moet je die methode hernoemen en als eerste lijn aanroepen in je preDispatch? 't is niet echt proper maar toch.

Offline lemoinet - 12/03/2011 19:08
Avatar van lemoinet PHP gevorderde die accolades komt omdat ik nogal veel programmeer in C#. bij de plugins heeft hij geen probleem met namespaces, dit is al een voorbereiding op ZF2.
die code is reeds 5 jaar oud, enkel aangepast aan ZF1.11. zoals je bovenaan kan zien moet deze plugin volledig herschreven worden (database-based).
dit dient enkel als voorbeeld.
Offline DriesA - 14/03/2011 08:52
Avatar van DriesA Lid Hoi,

Heb vanalles dat hierboven staat geprobeerd gisteren, maar het wil maar niet in orde komen.
Kan er iemand misschien een zip-filetje doorsturen waar alle componenten van ACL inzitten zodat ik even kan vergelijken wat ik eventueel mis?

Alvast bedankt.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s