2017-06-17 2 views
2

Die folgende Beschreibung basiert auf Laravel Entwicklung.Laravel mehrere Benutzertypen

Eine kurze Beschreibung der Funktionalität, die ich hoffe, mich zu erreichen,

Es gibt drei Arten von Benutzern. Superadmin, Admin und Endbenutzer.

Nur ein Superadmin existiert und er kann sowohl Admins als auch Endusers erstellen. Es kann mehrere Administratoren geben und für eine bestimmte Site ist ein Administrator definiert. Ein Administrator kann mehrere Endbenutzer erstellen.

Um den obigen Anwendungsfall zu erleichtern, welchen Ansatz sollte ich in Laravel nehmen?

Mein Versuch, dies zu tun, so weit ist:

ich mehrere Wachen umgesetzt und dann wurde ich fest, da es einige Strecken sind, die von allen Arten von Benutzern zugänglich sein sollte. Ich konnte es mit mehreren Wachen nicht schaffen, da wenn ich mehrere Wächter für eine Route definieren, diese Route nur zugänglich ist, wenn alle Benutzertypen angemeldet sind.

Sagen wir, ich habe eine Route von Superadmin und Admin, diese Route ist nur verfügbar, wenn ich mich als Superadmin angemeldet habe. Die Route ist nur verfügbar, wenn sowohl Superadmin als auch Admin angemeldet sind.

Scheint, wenn wir mehrere Wachen zuweisen, sind Wächter UND Ed. Aber ich brauche sie zu sein OR Ed.

Wache Zuordnung:

Route::group(['middleware' => ['auth:superadmin', 'auth:admin']], function() {... 

Antwort

0

Durch Ihre Logik, ein Superadmin ist immer ein Admin und ein Admin ist auch ein Enduser. Wenn Sie mit dem Öffnen von Routen in verschachtelter Ebene beginnen, können Sie diese Arbeit wie erhalten.

Route::group(['middleware' => ['auth:enduser']], function(){ 
    // All the routes available for Enduser 


    // For Admin 
    Route::group(['middleware' => ['auth:admin']], function(){ 
     // Give admin routes here 


     //Create group for SuperAdmin 
     Route::group(['middleware'=>['auth:superadmin']], function(){ 
       // Super admin routes 
     }); 
    }); 
}); 

So hatte Superadmin alles griffbereit.

+0

Wenn ich die Routen in verschachtelter Form gruppiere, werden Superadminrouten sowohl von enduder als auch von admin bewacht. Sowohl der Endbenutzer als auch der Administrator müssen angemeldet sein, um auf die Superadmin-Route zugreifen zu können. Ich habe es getestet und es leitet mich zur Endbenutzer-Login-Seite weiter. –

+0

Ihr Administrator und Superadmin sollte Endbenutzer sein, dies ist eine sehr genaue Definition des rollenbasierten Zugriffs. – anwerj

+0

Ich kann nicht verstehen, was Sie meinen. Kannst du mich bitte an einige Ressourcen verweisen, wo es erklärt, was du meinst? –

0

Anstelle von Guards würde ich SuperAdmin, Admin und EndUser in einzelne Middleware aufteilen, die eine einfache Rollenprüfung durchführt. Zum Beispiel eine Superadmin-Middleware:

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    if (Auth::user()->isSuperAdmin) { 
     return $next($request); 
    } 

    abort(404); 
} 

dann regelmäßig Admin

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    if (Auth::user()->isSuperAdmin || Auth::user()->isAdmin) { 
     return $next($request); 
    } 

    abort(404); 
} 

und dann schließlich eine einfache Prüfung für authentifizierte Benutzer, dh EndUser

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    if (Auth::check()) { 
     return $next($request); 
    } 

    abort(404); 
} 

Dann können Sie die Mitte gelten für Ihre Gruppen nach Bedarf.

Route::group(['middleware' => ['superadmin']], function() {... 

Route::group(['middleware' => ['admin']], function() {... 

Route::group(['middleware' => ['enduser']], function() {... 
+0

Ich werde dies versuchen und mit den Ergebnissen (Y) –

+0

@LakmalPremaratne zurückkommen, funktioniert die obige Lösungsmethode. –

+0

@shankarmsr, ich habe es geschafft, es mit Hilfe von Berechtigungen zu tun. Ich habe eine Middleware erstellt, die überprüft, ob eine bestimmte Ressource für einen bestimmten Benutzer (oder Benutzertyp) autorisiert ist. –

1

Ich schaffte es, es zu lösen. Keine Mehrfachwachen. Wie @anwerj wies darauf hin, alle Benutzer sind Typ ENDUSER

  1. Added user_type als Attribut User Modell. SUPERADMIN, ADMIN und ENDUSER sind die drei Benutzertypen.Es unterscheidet sich von der Benutzerrolle, da ein Benutzer mehrere Rollen annehmen kann, während ein Benutzer, der als ADMIN bezeichnet ist, für immer ADMIN ist und er kann spezielle Privilegien haben.
  2. Implementiert Genehmigung Mechanismus, bei dem eine Route gewährt werden kann, entweder
    • auf einen einzelnen Benutzer (dh nur die gewährten Benutzer Zugriff auf die bestimmte Route haben können) oder
    • eine Benutzerrolle (nicht die user_type Eine Benutzerrolle könnte mehrere Benutzer haben)
  3. Routen wurden zu permission_set gruppiert. Ein user_role können mehrere permission_sets

haben, wenn sich ein Benutzer anmeldet, Middleware überprüft, ob die Ressource angefordert wird, wird für die User gewährt.