FYI, if you havent seen this already, its definitely worth a look:

http://devzone.zend.com/article/4601

There are a couple of PDF's linked in there, the most helpful being the main one about the dispatch cycle.

Cheers!
ralph

Jon Lebensold wrote:
It's postings like this that keep me on the mailing list. Thanks Mon Zafra!

j

On Fri, Jul 17, 2009 at 3:20 AM, Muhammad Ali <imjob.org <http://imjob.org>@live.com <http://live.com>> wrote:

    Hi J
I am not sure if it would help but I am using
    Zend_Controller_Plugin_Abstract and registered in Bootstrap and
    works fine.
function _initPlugins(){
            Zend_Controller_Front::getInstance()->registerPlugin(new
    Plugin_ControllerAcl());
        }
Thanks

    *From:* J DeBord <mailto:[email protected]>
    *Sent:* Friday, July 17, 2009 8:02 AM
    *To:* Zend Framework General <mailto:[email protected]>
    *Subject:* Re: [fw-general] Zend_Acl When / Where to check your ACL?



    On Fri, Jul 17, 2009 at 8:58 AM, Muhammad Ali <imjob.org@
    <mailto:[email protected]>live.com <http://live.com>> wrote:

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

    You do need to do this, but I was having another issue. It was
    related to when the ACL is being checked, not the access rules
    themselves.

        Thanks

        *From:* Mon Zafra <mailto:[email protected]>
        *Sent:* Friday, July 17, 2009 7:00 AM
        *To:* Zend Framework General <mailto:[email protected]>
        *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 <[email protected]
        <mailto:[email protected]>> wrote:



            2009/7/16 Vladas Diržys <[email protected]
            <mailto:[email protected]>>

                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

                <http://www.dirzys.com>



                On Thu, Jul 16, 2009 at 14:24, Matthew Weier O'Phinney
                <[email protected] <mailto:[email protected]>> wrote:

                    -- J DeBord <[email protected]
                    <mailto:[email protected]>> 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            | [email protected]
                    <mailto:[email protected]>
                    Zend Framework          | http://framework.zend.com/






Reply via email to