Thursday, November 27, 2008

An easy way to add roles to users....

Hi folks,

I am posting this in the hope that some of you may be able to help.

I have a User model which has a HABTM association to Role and vice
versa.

I would like to add role to a user in the following way:


Tables:
users: fields..., HABTM Role
roles: id,name -- HABTM User
roles_users : user_id,role_id (linking table)

Code:
$role = array();
$role['Role'] = array('id' => $role_id);
$role['User']['User'] = array($list_user_id);
$this->User->Role->create();
$this->User->Role->save($role); // the role should really be updated
only and the association added to the user

Failed: Cake has thrown the following error: Warning (512): SQL Error:
1054: Unknown column 'RolesUser.id' in 'field list' [CORE\cake\libs
\model\datasources\dbo_source.php, line 521]

Cannot figure out what the problem really is, do not even know why
cake is looking at that field.

Because that fails I was forced to write a function to add roles to
user, which in my opinion is ugly.

Function:
//Send in the user id and role name
//function declared in user.php model
function addRole($user_id,$role){
$this->expects(array('Role')); //Models are binding when needed only
//$params = array('conditions' => array( 'Role.name' => $role));
$this->Role->recursive = -1;
$role = $this->Role->findByName($role);
$role_id = $role['Role']['id'];
if(!$data = $this->Role->query("SELECT * FROM roles_users AS Role
WHERE role_id = $role_id AND user_id = $user_id")){
//$role['User'] = array('User' => array($user_id));
//$this->Role->save($role); //Not working, errors for some reason
//pr('Please save the role now');
$this->Role->query("INSERT INTO roles_users (user_id,role_id) VALUES
($user_id,$role_id)");
}
}

That works, but I would like to avoid that if possible.

Do any of you know a smarter way to do the job.

Many thanks in advance...

--~--~---------~--~----~------------~-------~--~----~
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+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

No comments: