Re: queries on HABTM relationships
On Wed, Jan 2, 2013 at 8:32 PM, Stefano Campanella leona...@guildofmessengers.com wrote: Yes I am sure. In my case id is not numeric, the permission name is already an identifier for the permission Your DB schema is broken by design, then. Good luck with that. -- 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.
Re: queries on HABTM relationships
Broken for CakePHP or broken in general? Generally, I would not see a problem in using a non-numeric primary key, you just have to be conscious of the constraints this imposes. If it is for a constraint of CakePHP, well I didn't experience any problem with that yet. There is no error in queries. And permissions would be used as a read-only model, so no problem with the absence of auto-increment. AnywayI moved the permission entities out the db, they just didn't make sense there since they are never going to change during the life of the website. On Thursday, January 3, 2013 8:03:24 PM UTC+1, cricket wrote: On Wed, Jan 2, 2013 at 8:32 PM, Stefano Campanella leon...@guildofmessengers.com javascript: wrote: Yes I am sure. In my case id is not numeric, the permission name is already an identifier for the permission Your DB schema is broken by design, then. Good luck with that. -- 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.
Re: queries on HABTM relationships
Yes I did, but it does not suit my needs or my organization structure. For me it's at the same time too complicated and too limited. I don't need a tree, I need a graph, where a user can have more than one group; because users can be categorized in more than one way. Anyway, do you have any idea of why the query is not executed correctly? From the CakePHP Book I got the impression that that was the correct way to make that kind of search. -- 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.
Re: queries on HABTM relationships
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 leona...@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-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.
Re: queries on HABTM relationships
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 javascript: 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.comjavascript:. To unsubscribe from this group, send email to cake-php+u...@googlegroups.com javascript:. 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.
Re: queries on HABTM relationships
This simply is solvable with: $this-Auth-userScope = array('User.can_access_admin' = 1); Put that in you beforeFilter function inside AppController, and your problems are solved. If you want to redirect them, than you shoukd do something like this: if ($this-Auth-user()) { if(isset($this-params['admin']) $this-Auth-user('admin') != 1) { $this-redirect('/'); } } Hope this helps. Cheers On Wed, Jan 2, 2013 at 7:59 PM, lowpass zijn.digi...@gmail.com 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 leona...@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-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. -- *Ivan Rimac*** mail: ivn...@gmail.com *tel: +385 95 555 99 66* *http://ivanrimac.com* -- 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.
Re: queries on HABTM relationships
Excuse me Ivan, but there is no reference to userScope attribute anywhere in the source code of cakePHP, I assume you mean $this-Auth-scope. But it still doesn't help me, is was under the impression that that attribute is used to impose conditions for logging users in, this is not my case, I am working on the Authorization not on the Authentication. Furthermore, can_access_admin is not a field of User and the scope attribute is considered only by the Authentication component not by the Authorization one as far as I know. Thank you anyway :) Il 02/01/2013 21.56, Ivan Rimac ha scritto: This simply is solvable with: $this-Auth-userScope = array('User.can_access_admin' = 1); Put that in you beforeFilter function inside AppController, and your problems are solved. If you want to redirect them, than you shoukd do something like this: if ($this-Auth-user()) { if(isset($this-params['admin']) $this-Auth-user('admin') != 1) { $this-redirect('/'); } } Hope this helps. Cheers On Wed, Jan 2, 2013 at 7:59 PM, lowpass zijn.digi...@gmail.com mailto:zijn.digi...@gmail.com 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 leona...@guildofmessengers.com mailto:leona...@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-php@googlegroups.com mailto:cake-php@googlegroups.com. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com mailto:cake-php%2bunsubscr...@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 mailto:cake-php@googlegroups.com. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com mailto:cake-php%2bunsubscr...@googlegroups.com. Visit this group at http://groups.google.com/group/cake-php?hl=en. -- *Ivan Rimac* mail: ivn...@gmail.com mailto:ivn...@gmail.com /tel: +385 95 555 99 66/ /http://ivanrimac.com/ -- 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
Re: queries on HABTM relationships
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
Re: queries on HABTM relationships
I just realised that this also makes no sense. Why are you running a COUNT(*) on Group when your condition is to select only the Group with id = 1? Perhaps you need to start from the beginning and explain what it is you're looking for. And I'll second the suggestion to use ACL. On Wed, Jan 2, 2013 at 5:50 PM, lowpass zijn.digi...@gmail.com wrote: 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,
Re: queries on HABTM relationships
Works like a charm! Thank you so much cricket! Now to reply to your questions: I am using a count because I don't need any content returned. With this query I just check if the record exists, if it does then I know the Group has the specified permission. The count will always return 0 if group 1 has no can_access permission or 1 if the group has the permission. I don't need any information, I only need to know if it exists. I didn't find any note about CakePHP supporting only integer ids, is this true? Every permission has a unique name and it is not going to change, so I thought using an integer id and another name field is useless, I just use the permission name as primary key. As for using ACL: reading CakePHP2.x Book I understood that ACL only supports trees structures, but it is a limitation for me because I need to be able to group my users in mode than one way. A user could be a Manager but also a Moderator, and these two groups are not one child of the other. I would need ACL to support more than just trees, it should support graphs. So I decided to make my Authorization component, which just uses flat groups (there is no group hierarchy) but allows one user to have more than one group. And it isn't even very big, the Authorize class is only 70 lines long, while ACL seems really too complex. Anyway, I am done now. Thank you to everyone who tried to help me!! On Wednesday, January 2, 2013 11:53:44 PM UTC+1, cricket wrote: I just realised that this also makes no sense. Why are you running a COUNT(*) on Group when your condition is to select only the Group with id = 1? Perhaps you need to start from the beginning and explain what it is you're looking for. And I'll second the suggestion to use ACL. On Wed, Jan 2, 2013 at 5:50 PM, lowpass zijn.d...@gmail.com javascript: wrote: 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 leon...@guildofmessengers.com javascript: 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()));
Re: queries on HABTM relationships
array('*id*'='can_access_admin') Do you have sure is ID? Usually ID is numeric. Em terça-feira, 1 de janeiro de 2013 19h23min58s UTC-3, Stefano Campanella escreveu: 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-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.
Re: queries on HABTM relationships
Yes I am sure. In my case id is not numeric, the permission name is already an identifier for the permission On Wednesday, January 2, 2013 3:56:41 PM UTC+1, Maicon Pinto wrote: array('*id*'='can_access_admin') Do you have sure is ID? Usually ID is numeric. Em terça-feira, 1 de janeiro de 2013 19h23min58s UTC-3, Stefano Campanella escreveu: 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-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.
Re: queries on HABTM relationships
Have you looked at the inbuilt Auth and ACL components? Might save you a lot of time. Jeremy Burns Class Outfit http://www.classoutfit.com On 1 Jan 2013, at 22:23:58, Stefano Campanella leona...@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-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.