与
$ userRole = yii :: $ app-> authManager-> getRolesByUser($ userId);
得到阵列:
$userRole = Array ( [author] => yii\rbac\Role Object ( [type] => 1 [name] => author [description] => [ruleName] => [data] => [createdAt] => 1437713730 [updatedAt] => 1437713730 ) )
想得到一个字符串:
$ userRole 的值为'author'。
答案 0 :(得分:1)
getRolesByUser()用于返回所有用户的角色,我们无法强迫它只有一个角色,因为这不是 rbac 的工作方式,如果您需要检查用户是否可以执行某个角色,请使用此代码:
Yii::$app->user->can($role);
否则,如果您确实需要$userRole
将角色名称作为字符串值保留(如果用户只有一个角色),并且如果他有更多角色就让我们说一个角色数组,那么这可能是一种更简洁的方式做你要求的:
$userRole = yii::$app->authManager->getRolesByUser($userId);
// if no roles $userRole will be null by default
// so we better be sure that is not the case before doing the next
if ($userRole) {
foreach ($userRole as $role) {
$roles[] = $role->name;
}
// if user have 1 role then $userRole will be a string containing it
// othewhise let $userRole be an array containing them all
$userRole = count($roles) === 1 ? $roles[0] : $roles ;
}
答案 1 :(得分:0)
谢谢!这就是我想要确切知道的: yii2没有方法直接给角色提供角色,,因为一个用户可能有更多的角色。