Issue
I am new to yii and I have the following code in some of the controllers that are only used for admin role.
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
//'only' => ['index', 'view', 'create', 'update','delete'],
'rules' => [
[
'allow' => true,
'roles' => ['admin'],
],
],
],
];
}
All attempts to this controller from non-admin roles are blocked as required but the styled yii's error action is not returned. I have the following component in my main.php file:
'errorHandler' => [
'errorAction' => 'main/error',
],
But it is not working, all I get is:
An Error occurred while handling another error:
yii\web\ForbiddenHttpException: شما برای انجام این عملیات، دسترسی ندارید. in C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php:151
Stack trace:
#0 C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php(134): yii\filters\AccessControl->denyAccess(Object(yii\web\User))
#1 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\ActionFilter.php(75): yii\filters\AccessControl->beforeAction(Object(yii\web\ErrorAction))
#2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent))
#3 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Component.php(545): call_user_func(Array, Object(yii\base\ActionEvent))
#4 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(272): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#5 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\Controller.php(164): yii\base\Controller->beforeAction(Object(yii\web\ErrorAction))
#6 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(154): yii\web\Controller->beforeAction(Object(yii\web\ErrorAction))
#7 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Module.php(523): yii\base\Controller->runAction('error', Array)
#8 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\ErrorHandler.php(95): yii\base\Module->runAction('main/error')
#9 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\ForbiddenHttpException))
#10 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\ForbiddenHttpException))
#11 {main}
Previous exception:
yii\web\ForbiddenHttpException: شما برای انجام این عملیات، دسترسی ندارید. in C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php:151
Stack trace:
#0 C:\xampp\htdocs\food\vendor\yiisoft\yii2\filters\AccessControl.php(134): yii\filters\AccessControl->denyAccess(Object(yii\web\User))
#1 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\ActionFilter.php(75): yii\filters\AccessControl->beforeAction(Object(yii\base\InlineAction))
#2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent))
#3 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Component.php(545): call_user_func(Array, Object(yii\base\ActionEvent))
#4 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(272): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#5 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\Controller.php(164): yii\base\Controller->beforeAction(Object(yii\base\InlineAction))
#6 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Controller.php(154): yii\web\Controller->beforeAction(Object(yii\base\InlineAction))
#7 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Module.php(523): yii\base\Controller->runAction('', Array)
#8 C:\xampp\htdocs\food\vendor\yiisoft\yii2\web\Application.php(102): yii\base\Module->runAction('main/', Array)
#9 C:\xampp\htdocs\food\vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 C:\xampp\htdocs\food\admin\web\index.php(20): yii\base\Application->run()
#11 {main}
Any guidance is appreciet.
Solution
I figured it out that to show the error page, I need to grant the permission of the error action to the non-admin users.
[
'actions' =>
['logout', 'reset-password', 'request-password-reset', 'error'],
'allow' => true,
'roles' => ['branch'],
],
Answered By - Reza Saberi
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.