Yii2:在控制器中设置动作

时间:2016-10-24 15:26:38

标签: yii2

我的应用程序有多个操作但是当用户具有某个角色时,我只想允许一个。我找不到在控制器中设置动作的方法。     我想要这样的东西:

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

重定向会导致一百万个CORS问题,所以我想避免它。我怎样才能做到这一点? 谢谢!

2 个答案:

答案 0 :(得分:2)

其中一种方法是覆盖控制器中的createAction()方法。

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

如果满足条件,则此控制器中的任何被调用操作都将作为actionAllowedAction()方法的结果返回。

答案 1 :(得分:0)

在控制器中,您可以使用访问控制过滤器(ACF)

假设您希望站点控制器只允许角色admin访问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