0

私はLaravelの初心者(非常に初心者)で、Laravel 5.2でCartalyst Sentinelを使用してロールの承認を活用しています。

管理セクションには、「管理者」、「エージェント」、「ライター」という 3 つ (またはそれ以上) の役割があります。

また、次のように、混合ロール アクセスが必要なセクションもいくつかあります。

  • ダッシュボード (すべてのロールがアクセス可能: 管理者、エージェント、ライター)
  • ユーザー (アクセス可能: 管理者)
  • 注文 (アクセス可能: 管理者、エージェント)
  • ページ (アクセス可能: 管理者、ライター)
  • no_admin_here (アクセス可能: エージェント、ライター)

現時点では、2 つの役割だけで動作するように管理していましたが、今は行き詰っています。

これまでに行ったこと(必要なコードのみを入れました):

ルート.php

// only authenticated users can access these pages
Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['check']], function(){

    // these pages are accessible to all roles
    Route::get('dashboard', ['as' => 'dashboard', function(){
        return view('admin/dashboard');
    }]);

    // only admin can access this section
    Route::group(['middleware' => 'admin'], function(){

        Route::get('users', function(){
            return view('admin/users');
        });

    });

});

SentinelCheck ミドルウェア (Kernel.php では「check」という名前)

if (!Sentinel::check()) { // user is not authenticated
    return redirect()->route('admin.login')->with('error', 'You must be logged to view the page');
}
if (Sentinel::inRole('customer')) { // user is authenticated but he is a customer
    return redirect()->route('admin.login')->with('error', 'You are a customer and cannot access to backend section');
}

SentinelAdmin ミドルウェア (Kernel.php では「admin」という名前)

if (!Sentinel::inRole('admin')) { // user is authenticated but he is not an admin
    return redirect()->route('admin.login')->with('error', 'You are not admin and cannot view requested section');
}

SentinelAgent ミドルウェア (Kernel.php では「agent」という名前)

if (!Sentinel::inRole('agent')) { // user is authenticated but he is not an agent
    return redirect()->route('admin.login')->with('error', 'You are not agent and cannot view requested section');
}

私が言ったように、これまでのところとても良いのですが、役割を混ぜようとすると物事が台無しになります。つまり、次のようなルートを書くことはできません:

// only admin and agent can access this section
Route::group(['middleware' => ['admin', 'agent']], function(){

    Route::get('orders', function(){
        return view('admin/orders');
    });

});

「管理者」ミドルウェアがブロックしてログアウトするため、「エージェント」はセクションに到達しないためです。同様に、他のすべての役割を組み合わせることはできません。

['middleware' => ['admin', 'writer']]
['middleware' => ['agent', 'writer']]
['middleware' => ['admin', 'writer', 'whatever_else_role']]

等..

では、セクションへのロール アクセスを簡単に混在させる (簡単な) 方法はありますか? よろしくお願いいたします。

4

1 に答える 1

1

ミドルウェア パラメーターを使用すると、思ったより簡単でした

于 2016-03-23T16:33:06.650 に答える