2016-10-24 8 views
1

私のアプリにはいくつかのアクションがありますが、ユーザーに特定の役割がある場合は、そのアクションを許可したいだけです。私はコントローラーでアクションを設定する方法を見つけることができません。 私はこのような何かしたい:私はそれを避けるしたいと思いますので、Yii2:コントローラーでアクションを設定する

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

リダイレクトが百万CORSの問題につながります。どうすればこれを達成できますか?
ありがとうございます!

+0

あなたは[アクセス制御フィルタ](HTTPを使用して検討しました。 yiiframework.com/doc-2.0/guide-security-authorization.html#access-control-filter)? – Bizley

+0

はい、私は@ビズリーをしました...しかし、私は、特定のアクションの結果を返すには、どのアクションが呼び出されたかにかかわらず、他のものを許可しません。私はアクセスコントロールでこれを行う方法を見つけていません... – thomas

答えて

2

コントローラのcreateAction()メソッドをオーバーライドする方法の1つです。

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

条件が満たされている場合、このコントローラ内のいずれかと呼ばれるアクションがactionAllowedAction()方法の結果として返されます。あなたはサイトコントローラにしたいと仮定し

+0

ありがとう、これは間違いなく@ビズリーに役立ちます – thomas

0
コントローラあなたがアクセス制御フィルタを使用することができて

(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'], 
        ],     
       ], 
      ], 
     ]; 
    } 
    // ... 
} 

へのアクセスを管理者のみ役割を許可します// WWW:ガイド

http://www.yiiframework.com/doc-2.0/guide-security-authorization.htmlまたはこの参照http://www.yiiframework.com/doc-2.0/yii-base-actionfilter.html

+0

残念ながら、私はCORSでこの作業を行うにはあまりにも愚かであるようです。 OPTIONSリクエスト... – thomas

+0

@wathを意味しますか?これはYii2とあなたのAUTHによって管理されています – scaisEdge

+0

私はこれをAngularjsアプリケーションのAPIとして動作させるために必要とします。クロスドメインなので、AngularはいつもOPTIONSリクエストを起動して、誰かの家があるかどうかを確認します。一般的にこれらの要求を許可するフィルタがありますが、動作させることはできません。しかし、それは別の質問のための食べ物だと思います。ありがとう! – thomas

関連する問題