3

How to set flash message in Yii2 after denied access to controller? Here is how deny access http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html :

public function behaviors()
{
    return [
        'access' => [
            'class' => \yii\filters\AccessControl::className(),
            'only' => ['create', 'update'],
            'rules' => [
                // deny all POST requests
                [
                    'allow' => false,
                    'verbs' => ['POST']
                ],
                // allow authenticated users
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // everything else is denied
            ],
        ],
    ];
}

after this it redirects to site/login. how can I make flash message there like "This section is only for registered users"?

SO-user
  • 1,458
  • 2
  • 21
  • 43
sirjay
  • 1,767
  • 3
  • 32
  • 52

2 Answers2

5

Could you try adding a callback for denial? I hope this works:

public function behaviors()
{
    return [
        'access' => [
            'class' => \yii\filters\AccessControl::className(),
            'only' => ['create', 'update'],
            'rules' => [
                // deny all POST requests
                [
                    'allow' => false,
                    'verbs' => ['POST']
                ],
                // allow authenticated users
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // everything else is denied
            ],
            'denyCallback'  => function ($rule, $action) {
                Yii::$app->session->setFlash('error', 'This section is only for registered users.');
                Yii::$app->user->loginRequired();
            },
        ],
    ];
}
robsch
  • 9,358
  • 9
  • 63
  • 104
1

Also you can add denyCallback to each rule:

    [
      'allow' => false,
      'roles' => ['@'],
      'denyCallback' => function($rule, $action) {
         // callback logic
       }
    ]
Boris P.
  • 356
  • 3
  • 13