簡體   English   中英

Yii2:在控制器中設置動作

[英]Yii2: set action in controller

我的應用程序有多個操作,但是當用戶具有特定角色時,我只想允許一個。 我找不到在控制器中設置操作的方法。 我想要這樣的東西:

public function beforeAction($action) 
{
    if($action->id != 'range') 
    {
       # run another action with custom params
    }
    else return 1;
}

重定向將導致一百萬個CORS問題,因此我想避免這種情況。 我該怎么做?
謝謝!

一種方法是在控制器中重寫createAction()方法。

public function createAction($id)
{
    if (/* condition for one action limit */) {
        $id = 'allowedAction';
    }
    return parent::createAction($id);
}

如果滿足條件,則此控制器內的任何已調用操作都將作為actionAllowedAction()方法的結果返回。

在控制器中,您可以使用訪問控制過濾器(ACF)

假設您希望在站點控制器中僅允許角色管理員訪問actionViewforadmin

use yii\web\Controller;
use yii\filters\AccessControl;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout', 'signup', 'viewforadmin'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'],
                        'roles' => ['@'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['viewforadmin'],
                        'roles' => ['admin'],
                    ],                   
                ],
            ],
        ];
    }
    // ...
}

您可以看一下這份簡要指南

http://www.yiiframework.com/doc-2.0/guide-security-authorization.html或此參考http://www.yiiframework.com/doc-2.0/yii-base-actionfilter.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM