64. Cómo crear roles y permisos


3 comentarios

Inicia sesión para comentar

Comentarios:

  • Luiis Chogas

    Luiis Chogas hace 3 meses

    Como le asigno cuando uso teams, no me funciona y me quede estancado

    User::create([ … ])->assignRole('Admin');
  • Walter

    Walter hace 1 año

    ? Creación de Roles

     

    php artisan make:seeder RoleSeeder

     

    En database > seeders > RoleSeeder.php agregamos:

     

    use Spatie\Permission\Models\Role;
    
    class RoleSeeder extends Seeder
    {
    	public function run()
    	{
    		$role1 = Role::create(['name' => 'Admin']);
    		$role2 = Role::create(['name' => 'Blogger']);
    	}
    }

     

    ? Creación de Permisos

             Dentro de la función run anterior:

     

    	Permission::create(['name' => 'admin.home']);
    	
    	Permission::create(['name' => 'admin.categories.index']);
    	Permission::create(['name' => 'admin.categories.create']);
    	Permission::create(['name' => 'admin.categories.edit']);
    	Permission::create(['name' => 'admin.categories.destroy']);
    	
    	Permission::create(['name' => 'admin.tags.index']);
    	Permission::create(['name' => 'admin.tags.create']);
    	Permission::create(['name' => 'admin.tags.edit']);
    	Permission::create(['name' => 'admin.tags.destroy']);
    	
    	Permission::create(['name' => 'admin.posts.index']);
    	Permission::create(['name' => 'admin.posts.create']);
    	Permission::create(['name' => 'admin.posts.edit']);
    	Permission::create(['name' => 'admin.posts.destroy']);

     

             Ahora en la función run() de la clase DatabaseSeeder del archivo database > seeders > DatabaseSeeder.php agregamos:

     

    		$this->call(RoleSeeder::class);

     

             Ejecutamos los seeders:

     

    php artisan migrate:fresh --seed

     

    ? Asignamos permisos a los roles

             Introducimos registros en la tabla intermedia role_has_permissions usando el método syncRoles:

     

    Permission::create(['name' => 'admin.home'])->syncRoles([$role1, $role2]);

     

    ? Asignamos roles a usuarios

             En la función run() de la clase UserSeeder en el archivo database > seeders > UserSeeder.php usamos el método assignRole():

     

    	User::create([ … ])->assignRole('Admin');

     

             Volvemos a ejecutar los seeders:

     

    php artisan migrate:fresh --seed

     

  • Mauricio Giraldo

    Mauricio Giraldo hace 1 año

    Hola, me sale este error cuando agrego el  assignRole en el Seeder del User

      Class "App\Models\Role" not found

      751▕      * @return mixed
       752▕      */
       753▕     protected function newRelatedInstance($class)
       754▕     {
     ➜ 755▕         return tap(new $class, function ($instance) {
       756▕             if (! $instance->getConnectionName()) {
       757▕                 $instance->setConnection($this->connection);
       758▕             }
       759▕         });

     1   C:\wamp\www\Laravel9\Laravel\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasRelationships.php:490
         Illuminate\Database\Eloquent\Model::newRelatedInstance()

     2   C:\wamp\www\Laravel 9\\app\Models\User.php:78
         Illuminate\Database\Eloquent\Model::belongsToMany()
     

    • Victor Arana Flores hace 1 año

      Hola, el error te dice que no existe el modelo App\Models\Role

       

      Asegurate de seguir todos los pasos, ya que no debería estar llamando ese modelo, y debería estar llamado el modelo generado por Spatie.