2

管理者固有の操作用のモジュールを作成しました。すべてのコントローラーに同じアクセスルールを記述したくありません。それはかなりのコーディングスタイルではありません。

4

4 に答える 4

3

1つの解決策は、認証されたすべてのクラスに共通のBaseClassコントローラーを拡張することです。

このようにして、一度書くことができます。

于 2009-10-23T10:11:45.380 に答える
3

モジュールは、ディレクトリ構造が分離されたサブアプリケーションのようなものです。許可のフィルタリングまたはチェックについては責任を負いません。

唯一の重要な解決策は、Ismaelが提案したように新しい抽象化を定義することです。

class ExtendedController
{
    public function rules()
    {
        return array_merge(parent::rules(), array(
           // your rules
        ));
    }
}
于 2009-10-23T17:26:19.833 に答える
1

Ismaelとpestaaの選択は、実装が速くても非常に優れていますが、それでも、RBACモデルのようなより強力な代替手段を常にお勧めします。YiiRBACの非常に優れたGUIはhttp://code.google.com/p/srbac/にあります。

于 2009-11-18T18:13:01.217 に答える
0

これは私のために働いた:

class extendedController extends baseController
{
    public function accessRules()
    {
        return array_merge(

            // This controller's rules are added first:
            // Allow all users to call the 'hello' action.
            array(
                array('allow',
                    'actions'=>array('hello'), 
                    'users'=>array('*'),
                ),
            ),

            // BaseController rules are added last, especially
            // if the last rule in the baseController denies all
            // users that were not allowed yet.
            parent::accessRules()
        );
    }

    public function actionHello()
    {
        echo('Hello!');
    }
}
于 2014-04-29T19:33:31.173 に答える