如何检查 yii2 关系是否存在 show controller
how to check yii2 relation is exist show controller
我有用户和代理模型
用户有代理模式,可以访问 $user->agency
现在我想在关系 存在时检查 accessRule 如果该关系为 null 则显示我的控制器显示警报 'user->agency is null pealse create agency' 然后将用户传递给代理控制器
在用户模型中我有这样的关系:
public function getAgency(){
return $this->hasOne(Agency::className(),['id'=>'agency_id'])
->viaTable(self::MAP_TABLE,['user_id'=>'id']);
}
我有这个 accessRule 组件:
namespace common\components;
use common\models\User;
class AccessRule extends \yii\filters\AccessRule {
/**
* @inheritdoc
*/
protected function matchRole($user)
{
if (empty($this->roles)) {
return true;
}
foreach ($this->roles as $role) {
if ($role == '?') {
if ($user->getIsGuest()) {
return true;
}
}
elseif (!$user->getIsGuest()) {
$userObj = User::findOne(['id'=>$user->getId()]);
if ($role == User::AGENCY_USER) {
if ( $userObj->agency_perm >= User::AGENCY_USER) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif ($role == User::AGENCY_MODERATOR) {
if ( $userObj->agency_perm >= User::AGENCY_MODERATOR) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif ($role == User::AGENCY_ADMIN) {
if ($userObj->agency_perm >= User::AGENCY_ADMIN) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif ($role == User::SUPER_USER) {
if ($userObj->super_user == User::SUPER_USER) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif (!$user->getIsGuest() && $role == $user->identity->role) {
return true;
}
}
}
return false;
}
}
并在我的控制器中使用它:
'access' => [
'class' => AccessControl::className(),
// We will override the default rule config with the new AccessRule class
'ruleConfig' => [
'class' => AccessRule::className(),
],
'rules' => [
[
'allow' => true,
'roles' => [
User::SUPER_USER,
],
],
],
],
在Yii访问控制中,您可以通过以下方式检查用户访问权限:
- 检查每个动作(不推荐)
- 控制器
construct()
方法
- Module/App中间件
您可以在该级别查看您的自定义访问权限,然后选择授予访问权限或将他重定向到另一个页面。
在第三种方式中,您可以访问您的 controller/action
姓名,然后决定会发生什么。
我有用户和代理模型
用户有代理模式,可以访问 $user->agency
现在我想在关系 存在时检查 accessRule 如果该关系为 null 则显示我的控制器显示警报 'user->agency is null pealse create agency' 然后将用户传递给代理控制器
在用户模型中我有这样的关系:
public function getAgency(){
return $this->hasOne(Agency::className(),['id'=>'agency_id'])
->viaTable(self::MAP_TABLE,['user_id'=>'id']);
}
我有这个 accessRule 组件:
namespace common\components;
use common\models\User;
class AccessRule extends \yii\filters\AccessRule {
/**
* @inheritdoc
*/
protected function matchRole($user)
{
if (empty($this->roles)) {
return true;
}
foreach ($this->roles as $role) {
if ($role == '?') {
if ($user->getIsGuest()) {
return true;
}
}
elseif (!$user->getIsGuest()) {
$userObj = User::findOne(['id'=>$user->getId()]);
if ($role == User::AGENCY_USER) {
if ( $userObj->agency_perm >= User::AGENCY_USER) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif ($role == User::AGENCY_MODERATOR) {
if ( $userObj->agency_perm >= User::AGENCY_MODERATOR) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif ($role == User::AGENCY_ADMIN) {
if ($userObj->agency_perm >= User::AGENCY_ADMIN) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif ($role == User::SUPER_USER) {
if ($userObj->super_user == User::SUPER_USER) {
return true;
}
// Check if the user is logged in, and the roles match
} elseif (!$user->getIsGuest() && $role == $user->identity->role) {
return true;
}
}
}
return false;
}
}
并在我的控制器中使用它:
'access' => [
'class' => AccessControl::className(),
// We will override the default rule config with the new AccessRule class
'ruleConfig' => [
'class' => AccessRule::className(),
],
'rules' => [
[
'allow' => true,
'roles' => [
User::SUPER_USER,
],
],
],
],
在Yii访问控制中,您可以通过以下方式检查用户访问权限:
- 检查每个动作(不推荐)
- 控制器
construct()
方法 - Module/App中间件
您可以在该级别查看您的自定义访问权限,然后选择授予访问权限或将他重定向到另一个页面。
在第三种方式中,您可以访问您的 controller/action
姓名,然后决定会发生什么。