5

私はクライアントのために非常に広範なアプリを構築しており、ある種のグループ権限制御を作成する必要があります。CartalystとそのSentryパッケージを使うことにしました。
ここまでは順調ですね!

今私が抱えている問題は、ユーザーグループのアクセス許可を検出する最良の方法は何であるかということです。複数あるので、1つのフィルターを使用してそれを実行することはできません。

たとえば、私は次のようなことをします:

管理者レベルのアクセスが必要なページの場合

Route::group(array('before' => 'is_admin'), function()
{
       Route::get('admin', array('as'=>'admin', 'uses'=>'admin@index'));
       // Other methods that require admin-level access
});

より多くのレベルのアクセスなどが必要なページの場合。

Route::group(array('before' => 'is_moderator'), function()

    {
           Route::get('orodja/plosca', array('as'=>'moderator', 'uses'=>'moderator@index'));
           // Other methods that require moderator-level access
    });

このアプローチで私が抱えている問題は、すべてのコントローラーアクションに対して新しいルートを定義する必要があることであり、これは実際にはベストプラクティスのようには見えません。

次に、すべてのコントローラーをに登録しController::detect()てRESTフルにすることを考えましたが、ここでの問題は、フィルターをコントローラーのコンストラクターメソッドにのみ適用でき、単一のアクションには適用できないことです。1つのコントローラーに異なるアクセスレベルのメソッドがある場合はどうなりますか?

だから私の質問は:この問題を回避する最良の方法は何ですか?コントローラーコンストラクターではなく、単一のコントローラーメソッドにアクションフィルターを適用する方法はありますか?

私の英語をありがとう、そしてごめんなさい!

4

1 に答える 1

7

特定のURIで始まるすべてのリクエストにフィルターをアタッチできます(フィルターに関する公式ドキュメントを参照してください)

Route::filter('pattern: admin/*', 'auth');

または、コントローラー内の一部のアクションにのみフィルターをアタッチできます。

$this->filter('before', 'auth')->only(array('index', 'list'));

ちなみに、コントローラーのアクションごとにルートを作成する必要はありません。コントローラを登録すると、Route::controller('admin::home');自動的に起動します。

もう1つのオプションは、すべての役割に対して1つのフィルターのみを定義してから、フィルターauthのさまざまな役割を確認することです。

于 2013-03-15T10:11:10.260 に答える