0

Я новичок Laravel (ОЧЕНЬ новичок) с помощью Cartalyst Sentinel на Laravel 5.2, чтобы использовать полномочия.Laravel and Sentinel: смешать роли промежуточного программного обеспечения для авторизации

В разделе admin у меня есть три (или более) роли, то есть «admin», «agent» и «writer».

У меня также есть несколько разделов, которые должны иметь смешанный доступ к роли, то есть примерно так:

  • панель (доступной для всех ролей: администратор, агент, писатель)
  • пользователей (доступа к: админу)
  • заказов (доступно: администратор, агент)
  • страницы (доступная: администратор, писатель)
  • no_admin_here (доступное для: агента, писатель)

На данный момент мне удалось работать только с двумя ролями, но теперь я застрял.

Что я сделал до сих пор (я ставлю только необходимый код):

routes.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 Middleware (названный 'чек' в Kernel.php)

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 Middleware (названный 'админ' в Kernel.php)

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 Middleware (названный «агент» в Kernel.php)

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']] 

и т.д ..

Итак, есть (простой) способ, в котором я могу легко смешивать роли обращается к разделам? Заранее благодарим за вашу помощь

ответ

Смежные вопросы