0

Ich bin ein Laravel-Neuling (sehr Neuling) mit Cartalyst Sentinel auf Laravel 5.2 Rollen Berechtigungen zu nutzen.Laravel und Sentinel: mischen Rollen Middleware für die Autorisierung

Im Admin-Bereich habe ich drei (oder mehr) Rollen, d. H. "Admin", "agent" und "writer".

ich auch einige Abschnitte haben, die gemischte Rollen Zugriff, dh wie diese haben sollte:

  • Armaturenbrett (zugänglich für alle Rollen: admin, Agent, Schriftsteller)
  • Benutzer (zugänglich: admin)
  • Aufträge (zugänglich: admin, Agent)
  • Seiten (zugänglich: admin, Schriftsteller)
  • no_admin_here (zugänglich: Agent, Schriftsteller)

Im Moment schaffte ich es mit nur zwei Rollen zu arbeiten, aber jetzt stecke ich fest.

Was ich bisher getan (Ich habe nur den notwendigen Code):

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 (mit dem Namen 'überprüfen' in 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 (mit dem Namen 'admin' in 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 (mit dem Namen 'Agenten' in 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'); 
} 

So weit so gut, wie ich sagte, aber die Dinge vermasseln, wenn ich versuche, Rollen zu mischen; das heißt ich kann nicht eine Route wie folgt schreiben:

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

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

}); 

weil „Agent“ wird nie und ihn abzumelden blockiert den Abschnitt, da „admin“ Middleware erreichen. Und ebenso kann ich nicht alle anderen Rollen Mix tun:

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

etc ..

So gibt es eine (leicht) Art und Weise, in der ich leicht Rollen Zugriffe auf Abschnitte mischen? Vielen Dank im Voraus für Ihre Hilfe

Antwort