在一本名为Yii2 for Beginners的书中,主要是关于高级模板,我遇到了以下无法解释的代码,它似乎与RBAC相关:
$userHasRoleName = Yii::$app->user->identity->role->role_name;
这究竟是什么意思?例如,我猜这个:
Yii::$app->user
指的是这个文件:
vendor\yiisoft\yii2\web\User.php
这是对的吗?
在任何情况下,其余代码所指的是什么?具体做法是:
->identity->role->role_name
在上面的User.php文件中,我找不到像" function identity()"这样的东西,所以它不可能。我发现了许多$ identity变量,但我不知道代码可能指的是哪一个。并且根本没有$ role变量。
这段代码是指什么:
Yii::$app->user->identity->role->role_name;
答案 0 :(得分:1)
Yii描述了像__get,__ set等魔术方法,以获取无法访问的属性的访问权限。通常这样的方法从get或set开始(在Yii实现中)。要访问->identity
,\yii\web\User
方法getIdentity
。此方法返回您在配置中描述的identityClass
组件的user
属性的标识。通常identityClass
是实现IdentityInterface
的AR模型。
'components' => [
'user' => [
'identityClass' => 'common\models\User',
]
]
要访问->role
,您必须创建一个新方法
namespace common\models;
class User extends ActiveRecord implements IdentityInterface {
public function getRole(){
// if user can have only one role
return current( \Yii::$app->authManager->getRolesByUser( $this->id ) );
}
}
Btw ->role->role_name
的实施可能会有很大不同。