2017-03-20 1 views
0

Je construis une application web dans Laravel 5.2. Je suis relativement nouveau à Laravel, et je veux suivre les meilleures pratiques. J'ai une table appelée Rôles qui ont plusieurs rôles utilisateur nommés (par exemple: admin, éditeur, etc). Je souhaite que l'administrateur puisse modifier les autorisations pour ces rôles et en créer de nouveaux. Quel serait le meilleur moyen de stocker les autorisations?Quel est le meilleur moyen de stocker les autorisations de rôle utilisateur dans Laravel 5?

  1. Utilisez un champ entier avec chaque bit représentant une permission? (Je pense que cela deviendrait rapidement incontrôlable)
  2. Utilisez un tableau croisé dynamique et une connexion multi-utilisateur aux autorisations?
  3. Utilisez un champ de chaîne et juste sérialiser les privilèges choisis?

De nouveaux privilèges sont susceptibles d'être ajoutés à l'avenir, et mon objectif est de pouvoir déterminer facilement si un utilisateur a un certain rôle ou non. Exemple: $ user-> roles-> hasAdmin() ou quelque chose de similaire.

+0

Laravel 5.2 est obsolète et ne plus pris en charge. Vous devriez cibler Laravel 5.4 si vous développez de nouvelles applications. – sisve

Répondre

1

Vous pouvez emprunter les meilleures pratiques pour la table rôle/autorisations à partir du package Laravel Entrust:

// Create table for storing roles 
    Schema::create('{{ $rolesTable }}', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name')->unique(); 
     $table->string('display_name')->nullable(); 
     $table->string('description')->nullable(); 
     $table->timestamps(); 
    }); 

    // Create table for associating roles to users (Many-to-Many) 
    Schema::create('{{ $roleUserTable }}', function (Blueprint $table) { 
     $table->integer('user_id')->unsigned(); 
     $table->integer('role_id')->unsigned(); 

     $table->foreign('user_id')->references('{{ $userKeyName }}')->on('{{ $usersTable }}') 
      ->onUpdate('cascade')->onDelete('cascade'); 
     $table->foreign('role_id')->references('id')->on('{{ $rolesTable }}') 
      ->onUpdate('cascade')->onDelete('cascade'); 

     $table->primary(['user_id', 'role_id']); 
    }); 

    // Create table for storing permissions 
    Schema::create('{{ $permissionsTable }}', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name')->unique(); 
     $table->string('display_name')->nullable(); 
     $table->string('description')->nullable(); 
     $table->timestamps(); 
    }); 

    // Create table for associating permissions to roles (Many-to-Many) 
    Schema::create('{{ $permissionRoleTable }}', function (Blueprint $table) { 
     $table->integer('permission_id')->unsigned(); 
     $table->integer('role_id')->unsigned(); 

     $table->foreign('permission_id')->references('id')->on('{{ $permissionsTable }}') 
      ->onUpdate('cascade')->onDelete('cascade'); 
     $table->foreign('role_id')->references('id')->on('{{ $rolesTable }}') 
      ->onUpdate('cascade')->onDelete('cascade'); 

     $table->primary(['permission_id', 'role_id']); 
    }); 
+0

Merci, c'est exactement ce dont j'avais besoin! Je n'ai pas besoin de plusieurs rôles par utilisateur, mais que diable, il pourrait être encore utile si cela sera nécessaire dans le futur. – Moha