CakePHP: get user info in models

authentication, cakephp, model

Solution

There is a nice solution by Matt Curry. You store the data of the current logged user in the app_controller using the beforeFilter callback and access it later using static calls. A description can be found here: http://www.pseudocoder.com/archives/2008/10/06/accessing-user-sessions-from-models-or-anywhere-in-cakephp-revealed/

EDIT: the above link is outdated: https://github.com/mcurry/cakephp_static_user

Problem

I'm moving some of my find code inside models. Previously in my controller I had ``` $this->Book->Review->find('first', array( 'conditions' => array( 'Review.book_id' => $id, 'Review.user_id' => $this->Auth->user('id') ) )); ``` so in my Review model I put something like ``` function own($id) { $this->contain(); $review = $this->find('first', array( 'conditions' => array( 'Review.book_id' => $id, 'Review.user_id' => AuthComponent::user('id') ) )); return $review; } ``` So I'm calling AuthComponent statically from the Model. I know I can do this for the method AuthComponent::password(), which is useful for validation. But I'm getting errors using the method AuthComponent::user(), in particular Fatal error: Call to a member function check() on a non-object in /var/www/MathOnline/cake/libs/controller/components/auth.php on line 663 Is there a way to get the info about the currently logged user from a model?

Original source