>>
>> I'm using the datasources plugin, but it is not used in this particular controller nor in any class that is loaded there.
>
> I was referring to the location of your User model
I'm using no plug-in then

>
> You're describing another authorization handler
> http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#authorization

Yes I know...actually what really happens is that inside beforeFilter() $this->Auth->isAuthorized() is called, since cake doesn't have any support for using authorization for anonymous users I call it explicitly. So no spreading of authorization code, it's still inside the authorize component. yes, I know it's a strange usage of cakephp (apparently everything I write is strange for cake xD), but I want a system where actions can be made public or restricted to one particular user group without changing the code, but only the db content

> Putting a model in your $uses array makes it _available_ to be used from where it is setup on first use - it doesn't eagerly load the model.

Right, I didn't think of it, but for this perticular case I don't think it can be useful.

>> And anyway putting the class in the uses array doesn't work because controller classes are loaded after the beforeFilter() from what I read in the dispatcher code > That's logically impossible since the beforeFilter is IN the controller class.
Sorry, I meant that controller's Models are loaded after the beforeFilter.

My code quite simple:
In AppController, after components and helpers definition I only have:

public function beforeFilter() {
    parent::beforeFilter();
    /**
* This is the easiest way I found to make Authorize work for anonymous users too
     */
if(!$this->Auth->loggedIn() and $this->Auth->isAuthorized(array('id'=>0),$this->request)){
      $this->Auth->allow();
    }
  }

In my Authorize Component then I have:
  public function authorize($user, CakeRequest $request){
    $act=$this->action($request,':action');
if(isset($this->controller()->permissions) && !empty($this->controller()->permissions[$act])){
      if(empty($user) or empty($user['id'])){
        $group = ClassRegistry::init('Group');
        //Make a query to Group model
      }
      else{
        //Make normal logged-in User permissions check
      }
    }
    return false;
  }

That's it. I tried commenting in and out all the lines in differen combination and I found the problem arises as soon as ClassRegistry::init() is called.

-Stefano

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 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].
Visit this group at http://groups.google.com/group/cake-php?hl=en.


Reply via email to