Php 用户与RBAC中的后存储方法
我试图在注册表单时为用户分配角色(RBAC)Php 用户与RBAC中的后存储方法,php,database,yii2,rbac,Php,Database,Yii2,Rbac,我试图在注册表单时为用户分配角色(RBAC) public function signup() { if (!$this->validate()) { return null; } $user = new User(); $user->username = $this->username; $user->email = $this->email; $user->role = $this->
public function signup()
{
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->email = $this->email;
$user->role = $this->role;
$user->setPassword($this->password);
$user->generateAuthKey();
return $user->save() ? $user : null;
$myRole = '';
switch ($user->role) {
case 0:
$myRole = 'developer';
break;
case 1:
$myRole = 'project_manager';
break;
case 2:
$myRole = 'customer';
break;
}
$auth = Yii::$app->authManager;
$role = $auth->getRole($myRole);
$auth->assign($role, $user->id);
return true;
}
查看注册
<?= $form->field($model, 'role')->dropDownList(
[
'0' => 'Developer',
'1' => 'Project Manager',
'2' => 'Customer'
],
['prompt' => 'Choose your role..']) ?>
它很好用。。。
谁能解释为什么会这样?< p>你在这个方法的中间有一个<代码>返回<代码>,所以在<代码>之后的所有东西都返回$Uper->SaveE()?$用户:空代码>是一个死代码 您可能需要将其替换为:
if (!$model->save()) {
return null;
}
在这个方法的中间,你有一个<代码>返回<代码>,所以在<代码>之后的所有东西都返回$Auth->SaveE()?$用户:空代码>是一个死代码
您可能需要将其替换为:if (!$model->save()) {
return null;
}
我认为这与此有很大关系
return $user->save() ? $user : null;
您将在save()方法或null之后返回用户,因此在此之后编写的任何代码都不会实际执行
如果要仅在保存成功后分配角色,可以这样做:
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->email = $this->email;
$user->role = $this->role;
$user->setPassword($this->password);
$user->generateAuthKey();
if($user->save())
{
$myRole = '';
switch ($user->role) {
case 0:
$myRole = 'developer';
break;
case 1:
$myRole = 'project_manager';
break;
case 2:
$myRole = 'customer';
break;
}
$auth = Yii::$app->authManager;
$role = $auth->getRole($myRole);
$auth->assign($role, $user->id);
return true;
}
else
return false;
我认为这与此有很大关系
return $user->save() ? $user : null;
您将在save()方法或null之后返回用户,因此在此之后编写的任何代码都不会实际执行
如果要仅在保存成功后分配角色,可以这样做:
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->email = $this->email;
$user->role = $this->role;
$user->setPassword($this->password);
$user->generateAuthKey();
if($user->save())
{
$myRole = '';
switch ($user->role) {
case 0:
$myRole = 'developer';
break;
case 1:
$myRole = 'project_manager';
break;
case 2:
$myRole = 'customer';
break;
}
$auth = Yii::$app->authManager;
$role = $auth->getRole($myRole);
$auth->assign($role, $user->id);
return true;
}
else
return false;
下面的答案中已经提到了这一点,除非你有其他建议,否则不要发布答案。很抱歉,如果这让你感到困扰,但是,在我看来,当我还在写我的答案时,另一个人发送了他们的答案。这可能是因为我的答案更长。但是,它还是想帮助OP实现最初的意图,在用户创建后保存角色。没关系,它只是创建了一个重复的帖子,这就是我所担心的,有时我们没有意识到已经发布了相同的答案,不用担心。只是想让你知道,下面的答案中已经提到了这一点,除非你有其他建议,否则不要发布答案哦,如果这让你有任何困扰,我很抱歉,然而,在我看来,当我还在写我的答案时,另一个人发送了他们的答案。这可能是因为我的答案更长。但是,它还是想帮助OP实现最初的意图,在用户创建后保存角色。没关系,它只是创建了一个重复的帖子,这就是我所担心的,有时我们不知道已经发布了相同的答案,不用担心。只是想让你知道我更新了我的答案,尝试用我的代码替换你的
return
。我更新了我的答案,尝试用我的代码替换你的return
。