Matthew, thank you for your comment and explanation.

I removed the My_Acl class and used directly $acl = new Zend_Acl....
And then moved everything to the plugin using custom methods for
getting/setting resources. And then
in plugin-native methods, I created the rules and check if user is
allowed or not.
That works fine now. I can paste the code in pastie if anybody would
like to see or comment on it..

Thanks all,
scs

On Fri, Oct 9, 2009 at 9:14 PM, Matthew Weier O'Phinney
<[email protected]> wrote:
> -- scs <[email protected]> wrote
> (on Friday, 09 October 2009, 08:50 PM +0300):
>> Thank you all.
>> In fact I am aware of that the routing does not take place in
>> bootstrap but only with the help of plugins.
>>
>> This is the short story why i needed it:
>> I was implementing a zend_acl system which is stored on db.
>> In this system, every page has a record in db and every page is given
>> a role (a common role: guest, member etc.).
>> sample table:
>> fields: id, name, module, controller, action, role
>> values:1, contact, default, contact, index, guest
>>
>> To initiate the acl, I have a function _initAcl() in bootstrap file:
>> {
>>     //get frontcontroller and auth
>>    ...
>>    $acl = new My_Acl();
>>    $frontController->registerPlugin(new My_Plugin_Acl($acl, $auth));
>> }
>>
>>
>> The  class My_Acl has the function:
>> __construct() {
>>  1. get roles and resources from db (private functions of this
>> class): No Problem
>>  2. add them to acl ($this->addResource/addRole): No Problem
>>  3. find the requested page from the db and gets its role ???
>>  4. set allow rule for the page: $this->allow(page_role_name,
>> resource, action) ???
>> }
>>
>> The problem is in the 3rd step; I need to find the controller name and
>> action name so that
>> I can fetch the page's role_name from the db with the requested
>> controller and action name. And then go on 4th step above.
>
>
> I'd say you're doing too much in your constructor.
>
> Move 3 and 4 to a separate method, and call that method from
> routeShutdown() or dispatchLoopStartup(). At that point you'd know the
> actual controller/action pair, and will have no problems.
>
>
>> Lets say the requested page is url/contact/index
>>
>> To get this page record from the db,
>> I need to know the controller_name and action_name so that
>> I can get the contact page's (where controller=$controller and action
>> = $action) role name.
>>
>> However, I could not get the controller and action name in My_Acl.
>>
>> I am able to get them in the plugin but then I have to add roles and
>> resources(1st and 2nd step of __construct) in My_Acl
>> and the 3rd and 4th steps (find page data and set allow/deny rules) in
>> the plugin.
>>
>> In other words, I have to divide the acl jobs between the plugin and
>> My_Acl class.
>> I just wanted to set all the roles, resources and rules in My_Acl and
>> then in the plugin only check
>> if isAllowed or not and route them to login or denied page.
>>
>> This is it. Hope I made it clear.  I am not very much experienced and
>> knowledgeable yet on ZF but still reading tons of articles and codes.
>> And I would be pleased if I can hear any comments, recommendations,
>> some better practices or improvements.
>>
>> Thanks
>> scs
>>
>> On Fri, Oct 9, 2009 at 6:48 PM, David Mintz <[email protected]> wrote:
>> >
>> >
>> > On Fri, Oct 9, 2009 at 8:46 AM, Vadim Gabriel <[email protected]> wrote:
>> >>
>> >> i don't think they exits there yet. Those values are being set after the
>> >> bootstrap and the dispatch process.
>> >
>> >
>> > Therefore, this is the way to go, at least for the time being:
>> > http://framework.zend.com/manual/en/zend.controller.plugins.html
>> >
>> > --
>> > David Mintz
>> > http://davidmintz.org/
>> >
>> > The subtle source is clear and bright
>> > The tributary streams flow through the darkness
>> >
>>
>
> --
> Matthew Weier O'Phinney
> Project Lead            | [email protected]
> Zend Framework          | http://framework.zend.com/
>

Reply via email to