La gestión de usuarios es una característica importante en cualquier aplicación web. Un usuario debe tener acceso a los permisos que sólo necesita. De esa forma, el usuario sólo podrá ver los menús asignados a su función.
En este artículo, veremos cómo implementar roles y permisos de usuario en Laravel 8. Usaremos el paquete Laravel spatie para implementar roles y permisos. De esta manera, será fácil implementar roles y permisos de usuarios. Así es como se ve una vez completado:
Lista de usuarios
Editar Rol
Agregar Usuario
Roles
Implementaremos la publicación CRUD con el permiso adecuado para los usuarios de roles. Lo haremos desde cero paso a paso para que le resulte fácil implementarlo. Entonces, comencemos con una nueva aplicación Laravel.
Paso 1: crear la aplicación Laravel
En el paso inicial, necesitamos crear una aplicación nueva. Así que abra su Terminal o Símbolo del sistema y cree una nueva aplicación Laravel. Una vez completada la instalación, abra el proyecto en el editor de texto.
composer create-project laravel/laravel post
Y cambie el directorio de trabajo de la Terminal al proyecto
cd post
Paso 2: instalar y configurar paquetes
Una vez creada la aplicación Laravel, instalaremos el paquete Spatie. Ejecute el siguiente comando:
composer require spatie/laravel-permission
También vamos a utilizar la forma colectiva de Laravel. Entonces, en el mismo directorio raíz del proyecto Terminal, presione el comando:
composer require laravelcollective/html
Ahora necesitamos registrar la clase de proveedor en el archivo config/app.php, así que abra el archivo y agregue el proveedor de servicios.
'providers' => [
Spatie\Permission\PermissionServiceProvider::class,
];
Si desea realizar cambios en el paquete, puede ejecutar el siguiente comando y se creará un archivo de configuración config/permission.php
y archivos de migración. Ejecutaremos el comando de migración en el siguiente paso.
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
Paso 3: crear una tabla de publicaciones
Estamos usando el módulo de publicación para roles, así que use el siguiente comando para crear la migración de publicaciones.
php artisan make:migration create_posts_table
Esto creará una nueva migración en database/migrations
la carpeta. Abra el archivo y agregue las siguientes líneas en el método up().
id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
También necesitaremos configurar la base de datos antes de ejecutar la migración. Abra el archivo .env de la carpeta del proyecto y cambie la configuración de la base de datos.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=post
DB_USERNAME=root
DB_PASSWORD=root
Ahora ejecute el comando de migración.
php artisan migrate
Paso 4: crear modelo de publicación
En este paso, crearemos un modelo de publicación para obtener datos para la tabla de publicaciones. Ejecute el siguiente comando artesanal para generar el modelo de publicación.
php artisan make:model Post
Y agregue un atributo rellenable en el modelo de publicación.
El modelo de usuario ya está incluido en Laravel. Sólo necesitamos agregarle HasRoles
un rasgo. Entonces abra el modelo de usuario y agréguelo.
Step 5: Register package middlewares
El paquete viene con roles y middlewares de permisos, podemos agregarlos dentro del app/Http/Kernel.php
archivo.
protected $routeMiddleware = [
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
]
Paso 6: crear un andamio de autenticación
Hemos configurado el paquete, ahora necesitamos implementar la función de autenticación predeterminada de Laravel. Entonces ejecute el siguiente comando en la Terminal.
composer require laravel/ui
También necesitamos vistas para iniciar sesión y registrarse. Puedes hacerlo con el siguiente comando.
php artisan ui bootstrap --auth
Ahora también necesitamos compilar los recursos de vista para la vista de autenticación. Entonces ejecute el siguiente comando npm.
Nota: Los siguientes comandos npm solo son necesarios para la compilación de activos; si agrega su propia vista, no necesita ejecutar los comandos npm.
npm install
Y compílelo con el siguiente comando:
npm run dev
Paso 7: crear controladores
Vamos a crear una parte CRUD para la tabla de usuarios, roles y publicaciones, por lo que necesitamos controladores de recursos para ellos. Ejecute los siguientes comandos uno por uno para crear controladores para ellos.
php artisan make:controller UserController --resource
php artisan make:controller RoleController --resource
php artisan make:controller PermissionController --resource
php artisan make:controller PostController --resource
Ahora, uno por uno, editaremos los controladores y agregaremos la función CRUD. Así que abre los controladores uno por uno:
app/Http/Controllers/UserController.php
middleware('permission:user-list|user-create|user-edit|user-delete', ['only' => ['index','store']]);
$this->middleware('permission:user-create', ['only' => ['create','store']]);
$this->middleware('permission:user-edit', ['only' => ['edit','update']]);
$this->middleware('permission:user-delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$data = User::orderBy('id', 'desc')->paginate(5);
return view('users.index', compact('data'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$roles = Role::pluck('name','name')->all();
return view('users.create', compact('roles'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed',
'roles' => 'required'
]);
$input = $request->all();
$input['password'] = Hash::make($input['password']);
$user = User::create($input);
$user->assignRole($request->input('roles'));
return redirect()->route('users.index')
->with('success', 'User created successfully.');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$user = User::find($id);
return view('users.show', compact('user'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$user = User::find($id);
$roles = Role::pluck('name', 'name')->all();
$userRole = $user->roles->pluck('name', 'name')->all();
return view('users.edit', compact('user', 'roles', 'userRole'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email|unique:users,email,'.$id,
'password' => 'confirmed',
'roles' => 'required'
]);
$input = $request->all();
if(!empty($input['password'])) {
$input['password'] = Hash::make($input['password']);
} else {
$input = Arr::except($input, array('password'));
}
$user = User::find($id);
$user->update($input);
DB::table('model_has_roles')
->where('model_id', $id)
->delete();
$user->assignRole($request->input('roles'));
return redirect()->route('users.index')
->with('success', 'User updated successfully.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
User::find($id)->delete();
return redirect()->route('users.index')
->with('success', 'User deleted successfully.');
}
}
app/Http/Controllers/RoleController.php
middleware('permission:role-list|role-create|role-edit|role-delete', ['only' => ['index','store']]);
$this->middleware('permission:role-create', ['only' => ['create','store']]);
$this->middleware('permission:role-edit', ['only' => ['edit','update']]);
$this->middleware('permission:role-delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$data = Role::orderBy('id','DESC')->paginate(5);
return view('roles.index', compact('data'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$permission = Permission::get();
return view('roles.create', compact('permission'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|unique:roles,name',
'permission' => 'required',
]);
$role = Role::create(['name' => $request->input('name')]);
$role->syncPermissions($request->input('permission'));
return redirect()->route('roles.index')
->with('success', 'Role created successfully.');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$role = Role::find($id);
$rolePermissions = Permission::join('role_has_permissions', 'role_has_permissions.permission_id', 'permissions.id')
->where('role_has_permissions.role_id',$id)
->get();
return view('roles.show', compact('role', 'rolePermissions'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$role = Role::find($id);
$permission = Permission::get();
$rolePermissions = DB::table('role_has_permissions')
->where('role_has_permissions.role_id', $id)
->pluck('role_has_permissions.permission_id', 'role_has_permissions.permission_id')
->all();
return view('roles.edit', compact('role', 'permission', 'rolePermissions'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required',
'permission' => 'required',
]);
$role = Role::find($id);
$role->name = $request->input('name');
$role->save();
$role->syncPermissions($request->input('permission'));
return redirect()->route('roles.index')
->with('success', 'Role updated successfully.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Role::find($id)->delete();
return redirect()->route('roles.index')
->with('success', 'Role deleted successfully');
}
}
app/Http/Controllers/PermissionController.php
middleware('permission:permission-list|permission-create|permission-edit|permission-delete', ['only' => ['index','store']]);
$this->middleware('permission:permission-create', ['only' => ['create','store']]);
$this->middleware('permission:permission-edit', ['only' => ['edit','update']]);
$this->middleware('permission:permission-delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$data = Permission::orderBy('id','DESC')->paginate(5);
return view('permissions.index', compact('data'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('permissions.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|unique:permissions,name',
]);
Permission::create(['name' => $request->input('name')]);
return redirect()->route('permissions.index')
->with('success', 'Permission created successfully.');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$permission = Permission::find($id);
return view('permissions.show', compact('permission'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$permission = Permission::find($id);
return view('permissions.edit', compact('permission'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required'
]);
$permission = Permission::find($id);
$permission->name = $request->input('name');
$permission->save();
return redirect()->route('permissions.index')
->with('success', 'Permission updated successfully.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Permission::find($id)->delete();
return redirect()->route('permissions.index')
->with('success', 'Permission deleted successfully');
}
}
app/Http/Controllers/PostController.php
middleware('permission:post-list|post-create|post-edit|post-delete', ['only' => ['index', 'show']]);
$this->middleware('permission:post-create', ['only' => ['create', 'store']]);
$this->middleware('permission:post-edit', ['only' => ['edit', 'update']]);
$this->middleware('permission:post-delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$data = Post::latest()->paginate(5);
return view('posts.index',compact('data'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required',
]);
$input = $request->except(['_token']);
Post::create($input);
return redirect()->route('posts.index')
->with('success','Post created successfully.');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$post = Post::find($id);
return view('posts.edit',compact('post'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'title' => 'required',
'body' => 'required',
]);
$post = Post::find($id);
$post->update($request->all());
return redirect()->route('posts.index')
->with('success', 'Post updated successfully.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Post::find($id)->delete();
return redirect()->route('posts.index')
->with('success', 'Post deleted successfully.');
}
}
Paso 8: crear rutas
Hemos creado todos los controladores. Ahora creamos rutas para ellos, las abrimos routes/web.php
y agregamos nuevas rutas en ellas.
name('home');
Route::group(['middleware' => ['auth']], function() {
Route::resource('users', UserController::class);
Route::resource('roles', RoleController::class);
Route::resource('permissions', PermissionController::class);
Route::resource('posts', PostController::class);
});
Paso 9: crear archivos de vista Blade
Ahora, en este paso, vamos a crear archivos de vista Blade. Usaremos un diseño común y lo extenderemos a todas las vistas. Aquí está la lista de todas las vistas que crearemos en el resources/views
directorio /. Puede ir a todas las carpetas y copiar cada vista a su archivo local.
layouts/
app.blade.php
users/
index.blade.php
show.blade.php
create.blade.php
edit.blade.php
roles/
index.blade.php
show.blade.php
create.blade.php
edit.blade.php
permissions/
index.blade.php
show.blade.php
create.blade.php
edit.blade.php
posts/
index.blade.php
show.blade.php
create.blade.php
edit.blade.php
Empecemos por el archivo de diseño común. Ya está allí, solo necesita cambiarlo ligeramente y agregar un enlace de ruta en la barra de navegación.
resources/views/layouts/app.blade.php
{{ config('app.name', 'Laravel') }}
@yield('content')
Debajo de los archivos blade se encuentran las plantillas de visualización para todos los módulos CRUD.
resources/views/users/index.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Users
New User
#
Name
Email
Roles
Action
@foreach ($data as $key => $user)
{{ $user->id }}
{{ $user->name }}
{{ $user->email }}
@if(!empty($user->getRoleNames()))
@foreach($user->getRoleNames() as $val)
@endforeach
@endif
Show
@can('user-edit')
Edit
@endcan
@can('user-delete')
{!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
@endcan
@endforeach
{{ $data->render() }}
@endsection
resources/views/users/show.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
User
@can('role-create')
Back
@endcan
Name:
{{ $user->name }}
Email:
{{ $user->email }}
Password:
********
@endsection
resources/views/users/create.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Create user
Users
{!! Form::open(array('route' => 'users.store','method'=>'POST')) !!}
Name:
{!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!}
Email:
{!! Form::text('email', null, array('placeholder' => 'Email','class' => 'form-control')) !!}
Password:
{!! Form::password('password', array('placeholder' => 'Password','class' => 'form-control')) !!}
Confirm Password:
{!! Form::password('password_confirmation', array('placeholder' => 'Confirm Password','class' => 'form-control')) !!}
Role:
{!! Form::select('roles[]', $roles,[], array('class' => 'form-control','multiple')) !!}
{!! Form::close() !!}
@endsection
resources/views/users/edit.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Create user
Users
{!! Form::model($user, ['route' => ['users.update', $user->id], 'method'=>'PATCH']) !!}
Name:
{!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!}
Email:
{!! Form::text('email', null, array('placeholder' => 'Email','class' => 'form-control')) !!}
Password:
{!! Form::password('password', array('placeholder' => 'Password','class' => 'form-control')) !!}
Confirm Password:
{!! Form::password('password_confirmation', array('placeholder' => 'Confirm Password','class' => 'form-control')) !!}
Role:
{!! Form::select('roles[]', $roles, $userRole, array('class' => 'form-control','multiple')) !!}
{!! Form::close() !!}
@endsection
resources/views/roles/index.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Roles
@can('role-create')
New Role
@endcan
#
Name
Action
@foreach ($data as $key => $role)
{{ $role->id }}
{{ $role->name }}
Show
@can('role-edit')
Edit
@endcan
@can('role-delete')
{!! Form::open(['method' => 'DELETE','route' => ['roles.destroy', $role->id],'style'=>'display:inline']) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
@endcan
@endforeach
{{ $data->render() }}
@endsection
resources/views/roles/show.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Role
@can('role-create')
Back
@endcan
Name:
{{ $role->name }}
Permissions:
@if(!empty($rolePermissions))
@foreach($rolePermissions as $permission)
@endforeach
@endif
@endsection
resources/views/roles/create.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Create role
Roles
{!! Form::open(array('route' => 'roles.store','method'=>'POST')) !!}
Name:
{!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!}
Permission:
@foreach($permission as $value)
@endforeach
{!! Form::close() !!}
@endsection
resources/views/roles/edit.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Edit role
Roles
{!! Form::model($role, ['route' => ['roles.update', $role->id],'method' => 'PATCH']) !!}
Name:
{!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!}
Permission:
@foreach($permission as $value)
@endforeach
{!! Form::close() !!}
@endsection
resources/views/permissions/index.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Permissions
@can('role-create')
New Permission
@endcan
#
Name
Action
@foreach ($data as $key => $permission)
{{ $permission->id }}
{{ $permission->name }}
Show
@can('role-edit')
Edit
@endcan
@can('role-delete')
{!! Form::open(['method' => 'DELETE','route' => ['permissions.destroy', $permission->id],'style'=>'display:inline']) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
@endcan
@endforeach
{{ $data->appends($_GET)->links() }}
@endsection
resources/views/permissions/show.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Permission
@can('role-create')
Back
@endcan
Name:
{{ $permission->name }}
@endsection
resources/views/permissions/create.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Create permission
Permissions
{!! Form::open(array('route' => 'permissions.store','method'=>'POST')) !!}
Name:
{!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!}
{!! Form::close() !!}
@endsection
resources/views/permissions/edit.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Edit permission
Permissions
{!! Form::model($permission, ['route' => ['permissions.update', $permission->id], 'method'=>'PATCH']) !!}
Name:
{!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!}
{!! Form::close() !!}
@endsection
resources/views/posts/index.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Posts
@can('role-create')
New post
@endcan
#
Name
Action
@foreach ($data as $key => $post)
{{ $post->id }}
{{ $post->title }}
Show
@can('post-edit')
Edit
@endcan
@can('post-delete')
{!! Form::open(['method' => 'DELETE','route' => ['posts.destroy', $post->id],'style'=>'display:inline']) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
@endcan
@endforeach
{{ $data->appends($_GET)->links() }}
@endsection
resources/views/posts/show.blade.php
@extends('layouts.app')
@section('content')
@if (\Session::has('success'))
{{ \Session::get('success') }}
@endif
Post
@can('role-create')
Back
@endcan
Title:
{{ $post->title }}
Body:
{{ $post->body }}
@endsection
resources/views/posts/create.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Create post
Posts
{!! Form::open(array('route' => 'posts.store', 'method'=>'POST')) !!}
Title:
{!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!}
Body:
{!! Form::textarea('body', null, array('placeholder' => 'Body','class' => 'form-control')) !!}
{!! Form::close() !!}
@endsection
resources/views/posts/edit.blade.php
@extends('layouts.app')
@section('content')
@if (count($errors) > 0)
Opps! Something went wrong, please check below errors.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Create post
Posts
{!! Form::model($post, ['route' => ['posts.update', $post->id], 'method'=>'PATCH']) !!}
Title:
{!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!}
Body:
{!! Form::textarea('body', null, array('placeholder' => 'Body','class' => 'form-control')) !!}
{!! Form::close() !!}
@endsection
Paso 10: cree los permisos y roles necesarios
Necesitaremos algunos permisos y roles básicos cuando comencemos el proyecto. Usaremos seeder para crear permiso. Entonces, cree una clase de sembradora usando el siguiente comando:
php artisan make:seeder PermissionTableSeeder
Esto creará una sembradora en database/migrations
la carpeta. Abra y agregue el siguiente código.
$permission]);
}
}
}
También necesitaremos un rol que tenga los permisos anteriores con todos estos permisos. Así que ahora crea una sembradora para el rol.
php artisan make:seeder RoleTableSeeder
database/seeders/RoleTableSeeder.php
'admin']);
}
}
Y un usuario que tiene este rol. Cree una sembradora de usuario con el siguiente comando.
php artisan make:seeder UserTableSeeder
database/seeders/UserTableSeeder.php
'Wilber Arango',
'email' => 'admin@gmail.com',
'password' => Hash::make('12345678')
]);
$role = Role::find(1);
$permissions = Permission::pluck('id', 'id')->all();
$role->syncPermissions($permissions);
$user->assignRole([$role->id]);
}
}
Ahora ejecute estas semillas una por una usando los siguientes comandos:
php artisan db:seed --class=PermissionTableSeeder
php artisan db:seed --class=RoleTableSeeder
php artisan db:seed --class=UserTableSeeder
Ahora todo está listo desde el lado de la codificación. Necesitamos ejecutar el servidor Laravel con el siguiente comando artesanal.
php artisan serve
En tu navegador abre la url http://127.0.0.1:8000/login e inicia sesión con el usuario administrador que hemos creado.