Это не должно быть большое дело 'ролей', просто перезаписать $_has_many
отношения тоже ,
class Model_Member extends Model_Auth_User {
/**
* A user has many tokens and roles
*
* @var array Relationhips
*/
protected $_has_many = array(
'member_tokens' => array('model' => 'Member_Token'),
'roles' => array('model' => 'Role', 'through' => 'roles_members'),
);
public function create_member($values, $expected)
{
$extra_validation = Model_Member::get_password_validation($values)
->rule('password', 'not_empty');
return $this->values($values, $expected)->create($extra_validation);
}
public function update_member($values, $expected = NULL)
{
if (empty($values['password']))
{
unset($values['password'], $values['password_confirm']);
}
// Validation for passwords
$extra_validation = Model_Member::get_password_validation($values);
return $this->values($values, $expected)->update($extra_validation);
}
}
И создать модель Member_Token
и таблица roles_members
(имя поля member_id
вместо user_id
) соответственно.
class Model_Member_Token extends Model_Auth_User_Token {
// Relationships
protected $_belongs_to = array(
'member' => array('model' => 'Member'),
);
protected function create_token()
{
do
{
$token = sha1(uniqid(Text::random('alnum', 32), TRUE));
}
while (ORM::factory('Member_Token', array('token' => $token))->loaded());
return $token;
}
}
я не тест приведенный выше код, он просто сделал, чтобы дать вам представление о том, как это сделать.
Если вы все еще получаете исключение, отправьте сообщение об исключении.