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.


Reply via email to