Php Yii2-根据用户类型向控制器发送请求
我有一个控制器作为Php Yii2-根据用户类型向控制器发送请求,php,yii2,acl,Php,Yii2,Acl,我有一个控制器作为admin,另一个控制器作为guest。 我希望对静态地址(如test.com/guest/index)进行一些http请求,并得到以下结果: 如果用户(在请求正文中被确定为用户名)是管理员(实际上是不是来宾)用户,那么它应该移植请求(不是重定向,因为重定向不能在api客户机中完成,当然http请求也不能在重定向时沿着方法移动)到admincontroller的特定方法 就像我向test.com/guest/index发送POST请求,我是admin,因此它应该运行method
admin
,另一个控制器作为guest
。
我希望对静态地址(如test.com/guest/index
)进行一些http
请求,并得到以下结果:
如果用户(在请求正文中被确定为用户名
)是管理员
(实际上是不是来宾
)用户,那么它应该移植请求(不是重定向,因为重定向不能在api客户机中完成,当然http请求也不能在重定向时沿着方法移动)到admin
controller的特定方法
就像我向test.com/guest/index
发送POST
请求,我是admin
,因此它应该运行methodName()
-我应该指定名称而不是请求-来自admin
控制器,如果不是admin
的其他人发送相同的请求,它应该运行methodName()
(相同方法名称)来自guest
controller
如何做到这一点?我使用Yii2。所以我想知道有没有办法做到这一点,或者如果没有办法,那么在一个具有不同方法名称的控制器中是否可能做到这一点?
在ACL扩展中是否可能?
谢谢我建议创建一个名为
GuestController
的控制器,并根据当前用户状态而不是发送的信息处理请求:
class GuestController extends yii\web\Controller {
public function actionIndex() {
$response = null;
$model = User::getByCredentials();
if (!$model) {
$response = $this->guestAction();
} else {
switch ($model->role) {
case 'admin':
$response = $this->adminAction();
break;
case 'user':
$response = $this->someUserAction();
break;
}
}
echo $response;
}
protected function adminAction() {
$data = \Yii::$app->request->post(); // still can access _POST/_GET...
return 'Hallo Warold!';
}
/* ... */
}
谢谢,这看起来是一个很好的方法,但是我应该如何设置\Yii::$app->user->role part?因为没有仅基于请求正文和用户名的登录功能,我应该在哪里配置它?如果您不允许用户登录,那么我认为不应该处理管理功能。我可以将任何信息传递到您的表单-username al因此,实际上用户名和密码将随请求一起发送。我应该验证它们,如果是管理员,则执行methodAdmin(),如果不是,则执行methodGuest()。因此,在每个请求中,它都应该自己登录,没有会话、cookie或其他内容。有什么方法可以做到这一点吗?@mohammadfallah.rasoulnejad Check update。您只需在数据库中将
角色作为用户属性,然后从数据库中按用户名获取用户并比较密码。如果找到并匹配密码,则按规则进行访问,否则作为客人处理。
/**
*
*/
class User extends yii\web\ActiveRecord {
public funcion getByCredentials($username, $password) {
$model = self::findOne(['username' => $username]);
if (!empty($model) && \Yii::$app->security->validatePassword($password, $model->password)) {
return $model;
}
return null;
}
}