wake-up-neo.net

Laravel 5 rollenbasierte Zugriffskontrolle

Ich versuche, eine effiziente und flexible RBAC-Lösung für meine App zu entwickeln. Ich habe ein wenig recherchiert und denke, ich habe folgendes geschaffen.

In meinem Benutzermodell habe ich:

...
public function role() {
        return $this->belongsToMany('App\Models\Role', 'user_roles');
    }

    public function hasRole($role) {
        if($this->role->where('name', $role)->first())
            return true;
    }
...

Und ein Anwendungsbeispiel:

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

    Route::get('/dashboard', function () {
        if (Auth::user()->hasRole('Sales')) {
            return view('dashboards/sales');
        } else {
            return 'Don\'t know where to send you :(';
        }
    });

});

Berechtigungen werden Rollen zugewiesen. Berechtigungen werden jedoch im obigen Beispiel nicht geprüft. Rollen werden dann Benutzern zugewiesen, und ein Benutzer kann viele Rollen haben.

Ist meine Arbeitsweise skalierbar und eine effektive RBAC-Lösung?

13
imperium2335

Ich habe einige RBAC-Apps erstellt, und es hängt von der Art der Herausforderung ab, mit der Sie konfrontiert sind, z.

Benutzer haben eine Rolle, aber Sie möchten, dass ein bestimmter Benutzer Zugriff auf bestimmte Bereiche hat, wie Posts. Jetzt können Benutzer Beiträge wie Moderator bearbeiten. Der Berechtigungsansatz ist in diesem Fall besser als nur ein Rollenansatz. 

Definieren Sie den Zugriff durch einen Slug. Die anderen Felder können als Referenz für Super Admin oder ironischerweise für eine Editor-Rolle verwendet werden, beginnend mit einer Editor-Rolle und der Berechtigung zu einem neuen ". Bereich". 

public function up()
{
    Schema::create('permissions', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('name');
        $table->string('slug')->unique();
        $table->string('description')->nullable();
        $table->string('model')->nullable();
    });
}

Als Beispiel für Inhaltsdaten

$createUsersPermission = Permission::create([
    'name' => 'Create permissions',
    'slug' => 'create.permissions',
    ...
]); 

Und ein Anwendungsbeispiel:

if ($user->can('create.permissions') { // you can pass an id or slug
    //
}

Persönlich Präferenz und nie benutzt Zizaco Entrust wie von den anderen Leuten vorgeschlagen, aber es funktioniert auf dieselbe Weise. Auch Sie haben Leveln Ansatz.

3
AndreL

Ich habe ein wenig anders gemacht, ich habe hasRole in UserRole gemacht, ist nicht User (wirkt sich nicht zu sehr auf den Code aus). Also hier ist meine Route:

Route::group(['middleware' => 'auth'], function () {
Route::get('/myProfile', function () {
    if (App\UserRole::hasRole('ROLE_CUSTOMER',Auth::user())) {
        return view('views/customer');
    } else {
        return 'Don\'t know where to send you :(';
    }
}); });

Next Thing ist die Methode in meiner UserRole. Ich habe versucht, es einfach zu halten:

public static function hasRole($authority,$user) {
        $role = Role::where('authority',$authority)->first();
        $userRole = UserRole::where('role_id',$role->id)
                    ->where('user_id',$user->id)->first();
        if($userRole){
            return true;
        }
    }

Wir suchen nach der Berechtigung (ROLE_USER, ROLE_CUSTOMER usw.) und $ user ist ein Benutzerobjekt, das aus der DB abgerufen wird. Alles andere läuft nach deiner Frage/______.] Hoffe, es hilft! Prost!

3
89n3ur0n

Da es keine sofort verfügbare Lösung für die rollenbasierte Authentifizierung in laravel gibt. Sie können eine benutzerdefinierte Rollentabelle erstellen, die alle möglichen Rollen definiert, die Ihre Anwendung haben kann, sowie eine role_user-Tabelle, die die Zuordnung von Benutzer und Rollen enthält. 

Sie können unter Ihrem Benutzermodell Methoden erstellen, um zu prüfen, ob Benutzer zu einer bestimmten Rolle gehören. Verwenden Sie diese Methode, um eine neue Middleware zu registrieren. Middleware kann an Routen oder Controller angelegt werden.

Eine detaillierte Demo finden Sie in diesem Link https://www.5balloons.info/user-role-based-authentication-and-access-control-in-laravel/

0
Tushar