[symfony-users] Re: sfDoctrineGuardPlugin: automatically add new user to a group
Thanks Fabien, that's exactly what I wanted! I just didn't know exactly which method to override. I'm still finding my way around symfony ;) Cheers! Best Regards, Campezzi On May 26, 6:09 am, "FlyLM [ML]" wrote: > 2009/5/25 Campezzi : > > > > > Hi Fabien, > > > Thanks for the answer. Since the group was supposed to be added > > automatically, I had the groups_list widget unset in my form. The > > function you pointed me to seems to take what was stored in that > > variable and link the values to the user being registered. I assume I > > can get this working by making the groups_list field a hidden one and > > setting the default value on the action or even on the form code > > itself - then the code line you pointed out would do ther rest. > > However, I'm unsure about how safe this is - couldn't an user > > deliberately change the value of my hidden groups_list field in an > > attempt to be added to another group, one with a different permission > > set? > > Hi Campezzi, > > I had a same behavior in my last project. When I create a new user, > the group is automaticaly associated, there is no choice in the form. > First, I had thought about used a hidden field for "goup_list", but I > didn't keep this idea. I have override the doSave method of my form. > > So, my "doSave" method looks like this : > > class backendSfGuardUserAdminForm extends BasesfGuardUserAdminForm > { > [] > > /** > * (non-PHPdoc) > * @see > lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesfGuardUserForm#doSave() > */ > protected function doSave($con = null) > { > $isNew = $this->isNew(); > > if( $isNew ) > { > $password = substr(md5(rand(10, 99)), 0, 8); > $this->getObject()->setPassword($password); > } > > parent::doSave($con); > > if( $isNew ) > { > // Set the group, here "customer" > $group = Doctrine::getTable('sfGuardGroup')->findOneByName('customer'); > > $this->getObject()->link('groups', $group->getId()); > } > } > > [] > > } > > Fabien > > > > > Best Regards, > > Campezzi > > > On May 25, 12:53 pm, "FlyLM [ML]" wrote: > >> Hi, > > >> If you have always sfDoctrineGuardPlugin installed, take a look at > >> this file line 84 (savegroupsList method) > > >> /lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesGuardUserForm.class.php > > >> => $this->object->link('groups', array_values($link)); > > >> Fabien > > >> 2009/5/25 Campezzi : > > >> > Hi there! > > >> > I'm getting started with sfDoctrineGuardPlugin and after doing a few > >> > tutorials, I started to implement it in one of my projects. I have > >> > created a registration form and embedded the Profile class form. So > >> > far, so good - whenever a new user registers, both the sfGuardUser and > >> > Profile objects get saved to the database and are correctly > >> > associated. > > >> > Now, I have a "users" sfGuardGroup with a set of permissions (its id > >> > is 1), and I'd like to put all members who sign up via this > >> > registration form automatically in this group. My first idea was to > >> > override the save() method of the Profile model to do that: > > >> > class Profile extends BaseProfile > >> > { > >> > public function save(Doctrine_Connection $conn = null) > >> > { > >> > $ret = parent::save($conn); > > >> > $relation = new sfGuardUserGroup(); > >> > $relation->user_id = $this->sf_guard_user_id; > >> > $relation->group_id = 1; > >> > $relation->save(); > > >> > return $ret; > >> > } > >> > } > > >> > However, when I try to add a new user through the form I get a SQL > >> > error: > > >> > SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry > >> > '5-1' for key 'PRIMARY' > > >> > ... where 5 is the id of the newly created sfGuardUser and 1 is the id > >> > of the sfGuardGroup I'm trying to add the user to. Of course, I > >> > checked the database and there are no other sfGuardUserGroup objects > >> > with the 5-1 key combination, hence it's not a duplicate record thing. > > >> > I tried searching around, but found nothing about this error other > >> > than a few complaints about the save() method not being called on > >> > objects saved through embedded forms. It seems that is the issue here > >> > - I'm trying to create a many-to-many relation, but the user is not > >> > yet saved to the database when I try saving the relation, so the > >> > database throws an error because I'm adding a reference to an object > >> > that does not exist. However, if that is really the problem, isn't it > >> > weird that my profile actually has its sf_guard_user_id property set?! > > >> > So, the 64.5 million dollar question: how do I get this to act like I > >> > expect it to do? :) --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "symfony users" group. To post to th
[symfony-users] Re: sfDoctrineGuardPlugin: automatically add new user to a group
2009/5/25 Campezzi : > > Hi Fabien, > > Thanks for the answer. Since the group was supposed to be added > automatically, I had the groups_list widget unset in my form. The > function you pointed me to seems to take what was stored in that > variable and link the values to the user being registered. I assume I > can get this working by making the groups_list field a hidden one and > setting the default value on the action or even on the form code > itself - then the code line you pointed out would do ther rest. > However, I'm unsure about how safe this is - couldn't an user > deliberately change the value of my hidden groups_list field in an > attempt to be added to another group, one with a different permission > set? Hi Campezzi, I had a same behavior in my last project. When I create a new user, the group is automaticaly associated, there is no choice in the form. First, I had thought about used a hidden field for "goup_list", but I didn't keep this idea. I have override the doSave method of my form. So, my "doSave" method looks like this : class backendSfGuardUserAdminForm extends BasesfGuardUserAdminForm { [] /** * (non-PHPdoc) * @see lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesfGuardUserForm#doSave() */ protected function doSave($con = null) { $isNew = $this->isNew(); if( $isNew ) { $password = substr(md5(rand(10, 99)), 0, 8); $this->getObject()->setPassword($password); } parent::doSave($con); if( $isNew ) { // Set the group, here "customer" $group = Doctrine::getTable('sfGuardGroup')->findOneByName('customer'); $this->getObject()->link('groups', $group->getId()); } } [] } Fabien > > Best Regards, > Campezzi > > > On May 25, 12:53 pm, "FlyLM [ML]" wrote: >> Hi, >> >> If you have always sfDoctrineGuardPlugin installed, take a look at >> this file line 84 (savegroupsList method) >> >> /lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesGuardUserForm.class.php >> >> => $this->object->link('groups', array_values($link)); >> >> Fabien >> >> 2009/5/25 Campezzi : >> >> >> >> > Hi there! >> >> > I'm getting started with sfDoctrineGuardPlugin and after doing a few >> > tutorials, I started to implement it in one of my projects. I have >> > created a registration form and embedded the Profile class form. So >> > far, so good - whenever a new user registers, both the sfGuardUser and >> > Profile objects get saved to the database and are correctly >> > associated. >> >> > Now, I have a "users" sfGuardGroup with a set of permissions (its id >> > is 1), and I'd like to put all members who sign up via this >> > registration form automatically in this group. My first idea was to >> > override the save() method of the Profile model to do that: >> >> > class Profile extends BaseProfile >> > { >> > public function save(Doctrine_Connection $conn = null) >> > { >> > $ret = parent::save($conn); >> >> > $relation = new sfGuardUserGroup(); >> > $relation->user_id = $this->sf_guard_user_id; >> > $relation->group_id = 1; >> > $relation->save(); >> >> > return $ret; >> > } >> > } >> >> > However, when I try to add a new user through the form I get a SQL >> > error: >> >> > SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry >> > '5-1' for key 'PRIMARY' >> >> > ... where 5 is the id of the newly created sfGuardUser and 1 is the id >> > of the sfGuardGroup I'm trying to add the user to. Of course, I >> > checked the database and there are no other sfGuardUserGroup objects >> > with the 5-1 key combination, hence it's not a duplicate record thing. >> >> > I tried searching around, but found nothing about this error other >> > than a few complaints about the save() method not being called on >> > objects saved through embedded forms. It seems that is the issue here >> > - I'm trying to create a many-to-many relation, but the user is not >> > yet saved to the database when I try saving the relation, so the >> > database throws an error because I'm adding a reference to an object >> > that does not exist. However, if that is really the problem, isn't it >> > weird that my profile actually has its sf_guard_user_id property set?! >> >> > So, the 64.5 million dollar question: how do I get this to act like I >> > expect it to do? :) > > > --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to symfony-users@googlegroups.com To unsubscribe from this group, send email to symfony-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-users?hl=en -~--~~~~--~~--~--~---
[symfony-users] Re: sfDoctrineGuardPlugin: automatically add new user to a group
Hi Fabien, Thanks for the answer. Since the group was supposed to be added automatically, I had the groups_list widget unset in my form. The function you pointed me to seems to take what was stored in that variable and link the values to the user being registered. I assume I can get this working by making the groups_list field a hidden one and setting the default value on the action or even on the form code itself - then the code line you pointed out would do ther rest. However, I'm unsure about how safe this is - couldn't an user deliberately change the value of my hidden groups_list field in an attempt to be added to another group, one with a different permission set? Best Regards, Campezzi On May 25, 12:53 pm, "FlyLM [ML]" wrote: > Hi, > > If you have always sfDoctrineGuardPlugin installed, take a look at > this file line 84 (savegroupsList method) > > /lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesGuardUserForm.class.php > > => $this->object->link('groups', array_values($link)); > > Fabien > > 2009/5/25 Campezzi : > > > > > Hi there! > > > I'm getting started with sfDoctrineGuardPlugin and after doing a few > > tutorials, I started to implement it in one of my projects. I have > > created a registration form and embedded the Profile class form. So > > far, so good - whenever a new user registers, both the sfGuardUser and > > Profile objects get saved to the database and are correctly > > associated. > > > Now, I have a "users" sfGuardGroup with a set of permissions (its id > > is 1), and I'd like to put all members who sign up via this > > registration form automatically in this group. My first idea was to > > override the save() method of the Profile model to do that: > > > class Profile extends BaseProfile > > { > > public function save(Doctrine_Connection $conn = null) > > { > > $ret = parent::save($conn); > > > $relation = new sfGuardUserGroup(); > > $relation->user_id = $this->sf_guard_user_id; > > $relation->group_id = 1; > > $relation->save(); > > > return $ret; > > } > > } > > > However, when I try to add a new user through the form I get a SQL > > error: > > > SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry > > '5-1' for key 'PRIMARY' > > > ... where 5 is the id of the newly created sfGuardUser and 1 is the id > > of the sfGuardGroup I'm trying to add the user to. Of course, I > > checked the database and there are no other sfGuardUserGroup objects > > with the 5-1 key combination, hence it's not a duplicate record thing. > > > I tried searching around, but found nothing about this error other > > than a few complaints about the save() method not being called on > > objects saved through embedded forms. It seems that is the issue here > > - I'm trying to create a many-to-many relation, but the user is not > > yet saved to the database when I try saving the relation, so the > > database throws an error because I'm adding a reference to an object > > that does not exist. However, if that is really the problem, isn't it > > weird that my profile actually has its sf_guard_user_id property set?! > > > So, the 64.5 million dollar question: how do I get this to act like I > > expect it to do? :) --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to symfony-users@googlegroups.com To unsubscribe from this group, send email to symfony-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-users?hl=en -~--~~~~--~~--~--~---
[symfony-users] Re: sfDoctrineGuardPlugin: automatically add new user to a group
Hi, If you have always sfDoctrineGuardPlugin installed, take a look at this file line 84 (savegroupsList method) /lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesGuardUserForm.class.php => $this->object->link('groups', array_values($link)); Fabien 2009/5/25 Campezzi : > > Hi there! > > I'm getting started with sfDoctrineGuardPlugin and after doing a few > tutorials, I started to implement it in one of my projects. I have > created a registration form and embedded the Profile class form. So > far, so good - whenever a new user registers, both the sfGuardUser and > Profile objects get saved to the database and are correctly > associated. > > Now, I have a "users" sfGuardGroup with a set of permissions (its id > is 1), and I'd like to put all members who sign up via this > registration form automatically in this group. My first idea was to > override the save() method of the Profile model to do that: > > class Profile extends BaseProfile > { > public function save(Doctrine_Connection $conn = null) > { > $ret = parent::save($conn); > > $relation = new sfGuardUserGroup(); > $relation->user_id = $this->sf_guard_user_id; > $relation->group_id = 1; > $relation->save(); > > return $ret; > } > } > > However, when I try to add a new user through the form I get a SQL > error: > > SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry > '5-1' for key 'PRIMARY' > > ... where 5 is the id of the newly created sfGuardUser and 1 is the id > of the sfGuardGroup I'm trying to add the user to. Of course, I > checked the database and there are no other sfGuardUserGroup objects > with the 5-1 key combination, hence it's not a duplicate record thing. > > I tried searching around, but found nothing about this error other > than a few complaints about the save() method not being called on > objects saved through embedded forms. It seems that is the issue here > - I'm trying to create a many-to-many relation, but the user is not > yet saved to the database when I try saving the relation, so the > database throws an error because I'm adding a reference to an object > that does not exist. However, if that is really the problem, isn't it > weird that my profile actually has its sf_guard_user_id property set?! > > So, the 64.5 million dollar question: how do I get this to act like I > expect it to do? :) > > > --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to symfony-users@googlegroups.com To unsubscribe from this group, send email to symfony-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-users?hl=en -~--~~~~--~~--~--~---