Ok, I tore my hair out over this for a while and then figured out an
easy solution. I just wanted to share it for others who run into the
same problem. And maybe somebody has an even better solution that I
overlooked.

Problem: Control accessibility to certain parts of a view or layout
using authorization. For example, if there is a 'delete' button, I
only want someone who actually has access to delete to even see the
button.

Wrong Way: My first attempt, after looking all through the
documentation without enlightenment, was to try to load the
AuthComponent into my layout. This just doesn't work well because the
AuthComponent wants a controller, and I didn't want to have to create
a controller also and risk other missing parts.

Solution: So instead, I just decided to pass my controller to the view
using this call from with beforeFilter. I added this into my
AppController so all my controllers would behave the same.
        $this->set('controller', $this);

Now in my views and layouts I have $controller and can use the
following authentication call:
        $controller->isAuthorized('controllers/MyController/delete')

To make this solution complete for those who need it, here's the
isAuthorized method from my AppController.
        function isAuthorized($action=null) {
                if(!$action) $action = $this->action;
                return $this->Acl->check($this->Auth->user(), $action);
        }

I'm curious to hear others' feedback on this approach.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to