PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, January 12, 2022

[FIXED] styled error action is not returned for ForbiddenHttpException in yii2

 January 12, 2022     php, yii     No comments   

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
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing