Hi

I think you need to add the error resource to the Acl and allow full access to 
error controller.

Thanks


From: Mon Zafra 
Sent: Friday, July 17, 2009 7:00 AM
To: Zend Framework General 
Subject: Re: [fw-general] Zend_Acl When / Where to check your ACL?


The plugin preDispatch() is invoked earlier than the helper preDispatch(). The 
order kinda looks like this:

plugins.routeStartup()
router.route()
plugins.routeShutdown()
plugins.dispatchLoopStartup()
[loop]
  plugins.preDispatch()
  [if controller exists]
    controller.init()
    helpers.preDispatch()
    controller.preDispatch()
    controller.action()
    controller.postDispatch()
    helpers.postDispatch()
  [/if]
  plugins.postDispatch()
[/loop while request.isDispatched is false]
plugins.dispatchLoopShutdown()

The problem with the ACL plugin is that the checking is done before the 
dispatcher could determine if the controller class being requested exists. 
There are a couple of ways to solve this:

  - pull the dispatcher object from the front controller, test 
$dispatcher->isDispatchable($request) in your plugin and act accordingly. 
Basically, you duplicate the logic in the dispatcher dispatch().
  - defer the checking until after the controller has been instantiated but 
before the action.

You have three places to do the latter: controller init(), helper preDispatch() 
and controller preDispatch(). Two of those require you to extend a different 
base controller. I prefer doing it in a helper since I might want to have other 
logic in some of my controller hooks so I don't have to remember calling 
parent::init() or preDispatch().

   -- Mon



On Fri, Jul 17, 2009 at 12:59 PM, J DeBord <jasdeb...@gmail.com> wrote:




  2009/7/16 Vladas Diržys <vladas.dir...@gmail.com> 


    Why an action helper, why not a plugin?


   I'd like to know as well. Is an action helper more appropriate for the case 
I described, or should an action helper always be used for Authorization ( 
Zend_Acl anyways)?

  In genral, what is the difference beteween front controller plugins and 
action helpers. When would you use one instead of the other?

  To give Vladas a short answer based on my case, the front controller plugin 
did not provide the functionality I wanted. An action helper did.

  Thanks a lot,

  J




    On Thu, Jul 16, 2009 at 14:24, Matthew Weier O'Phinney <matt...@zend.com> 
wrote:

      -- J DeBord <jasdeb...@gmail.com> wrote
      (on Thursday, 16 July 2009, 09:30 AM +0200):

      > I created a front controller plugin for checking my ACL against the 
user's
      > role. It first checks Zend_Auth for an identity. If an identity exists, 
it
      > grabs the identity's role. If no identity exists, it uses 'guest' as the
      > default role. I hooked into the preDispatch() method of the front 
controller
      > plugin.
      >
      >  This works, except that I've lost my "page not found functionality". 
So I get
      > "resource not found" or "not authorized" message when requests for non
      > existance controllers or actions are made.
      >
      > Would it be better to have the controllers extend a "BaseController" 
that does
      > the ACL checks in the init() method?
      >
      > What is the preferred way or best practice for running the ACL checks?


      Use an action helper with a preDispatch() hook, and register it in your
      bootstrap. :)

      --
      Matthew Weier O'Phinney
      Project Lead            | matt...@zend.com
      Zend Framework          | http://framework.zend.com/





Reply via email to