I think that should be something like: $data = $this->controller()->Group->find( 'count', array( 'conditions' => array( 'Group.id' => 1 // hard-coded for testing? ), 'joins' => array( array( 'type' => 'INNER', 'table' => 'groups_perms', 'alias' => 'GroupPerm', 'conditions' => array( 'GroupPerm.group_id' => 'Group.id' ) ), array( 'type' => 'INNER', 'table' => 'perms', 'alias' => 'Perm', 'conditions' => array( 'GroupPerm.perm_id' => 'Perm.id' ) ) ) ) );
However, I've left out the perm.id='can_access_admin' part because it makes no sense in the context of Cake. The id column should be an INT. I presume you mean something like 'Perm.type' => 'can_access_admin', in which case add it to the 2nd joins conditions array. On Wed, Jan 2, 2013 at 3:48 PM, Stefano Campanella <leona...@guildofmessengers.com> wrote: > mmh, ok. But the problem is that even if I change the find("count") into a > find("all") it still loads data only from Group table. > > Yes I am using the AuthComponent for logged in users. But since I want to > use my Authorize class also for managing what anonymous users can access I > am calling $this->Auth->isAuthorized() in the beforeFilter of AppController > with a $user parameter of array('id'=>0). Inside the authorize method I > recognize the empty user and make checks for permissions on an hard coded > group id. I checked this would work correctly, if only I could make the > query in the right way. > > Let's change the question. Which code would you write to make CakePHP > execute this query: >> >> SELECT COUNT(*) AS count FROM groups INNER JOIN groups_perms ON >> groups.id=groups_perms.group_id INNER JOIN perm ON >> groups_perms.perm_id=perm.id WHERE group.id=1 AND perm.id='can_access_admin' > > given that you have access to $this->controller()->Group? > > Thanks > > On Wednesday, January 2, 2013 7:59:24 PM UTC+1, cricket wrote: >> >> When running a find('count') the contain param is useless. This is >> because the main query is fetching a sum, not a set of records from >> which to fetch the associated 'contain' records. >> >> Are you using AuthComponent? You can use that to fetch the User and >> associated records. However, I can't remember how deep it goes. To see >> what records it has, put this in your UsersController login method: >> >> die(debug($this->Auth->user())); >> >> >> http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#accessing-the-logged-in-user >> >> On Tue, Jan 1, 2013 at 5:23 PM, Stefano Campanella >> <leon...@guildofmessengers.com> wrote: >> > Hello all, >> > this is my first time posting here. I recently started to study how to >> > use >> > CakePHP and I'm trying to develop a website. >> > In my website I am writing a custom authorize component where each user >> > get >> > one or more groups and each group has one or more permissions associated >> > to >> > it. >> > I have problems in using the find() method. >> > This is my structure: >> > User hasAndBelongsToMany Group >> > Group hasAndBelongsToMany Perm >> > >> > I have attached Containable to all the Models (in AppModel) >> > >> > now in my authorization component I need to check if a group has a >> > specific >> > permission, and for this I use find(): >> > >> >> if(!isset($this->controller()->Group)){ >> >> $this->controller()->loadModel('Group'); >> >> } >> >> $n_perm=$this->controller()->Group->find('count',array( >> >> 'conditions'=>array('id'=>1), >> >> 'contain'=>array( >> >> 'Perm'=>array( >> >> 'conditions' => array('id'=>'can_access_admin') >> >> ) >> >> ) >> >> >> >> )); >> > >> > >> > I would expect this to give me a result >=1 if group 1 has the >> > 'can_access_admin' permission, and =0 if the group has no such >> > permission. >> > This is not what actually happens, the only query that cakePHP shows is >> > this: >> > >> > SELECT COUNT(*) AS `count` FROM `groups` AS `Group` WHERE `id` = 1 >> > >> > And it is obviously not enough to find what I requested. >> > >> > Can anyone help me? >> > >> > Thanks >> > >> > -- >> > 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 cake...@googlegroups.com. >> > To unsubscribe from this group, send email to >> > cake-php+u...@googlegroups.com. >> > Visit this group at http://groups.google.com/group/cake-php?hl=en. >> > >> > > > -- > 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 cake-php@googlegroups.com. > To unsubscribe from this group, send email to > cake-php+unsubscr...@googlegroups.com. > Visit this group at http://groups.google.com/group/cake-php?hl=en. > > -- 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 cake-php@googlegroups.com. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php?hl=en.