Autenticación y Autorización
Programación Web II - TUPAR - UNICEN
Autenticación
La autenticación es el acto o proceso de confirmar que algo (o alguien) es quien dice ser
Autorización
Proceso por el cual se autoriza al usuario (ya identificado) a acceder a determinados recursos de la misma
Autenticación en Laravel
Configuración
Usuarios
Laravel Default
Manos a la obra
php artisan make:auth
Problema #1
Nuestra cliente quiere que la App de Tareas, ahora solo puedan usarla usuarios registrados en nuestro sitio
Paréntesis de estilos
Miremos el Layout
Laravel CSS
Build Sass
npm install
npm run dev
Cómo proteger una ruta?
Middleware
HTML
URL Request
Return “Hello”
AUTH
Protegiendo Rutas
public function __construct()� {� $this->middleware('auth');� }
Route::get('profile', function () {� // Only authenticated users may enter...�})->middleware('auth');
Problema #2
Nuestro cliente quiere que la App de Tareas, ahora tenga tareas por usuario
Es decir que cuando el usuario accede vea solo sus tareas
Qué hacemos?
Problema #3
Nuestro cliente está muy contento con la funcionalidad de tareas por usuarios y ahora quiere que un usuario pueda crear tareas para otro usuario
Qué hacemos?
TBC
Problema #4
Nuestro cliente quiere restringir el acceso a la asignación de tareas solo a los usuarios que son manager
Autorización en Laravel
Introducción
Gates - Closures
public function boot()�{� $this->registerPolicies();�� Gate::define('update-post', function ($user, $post) {� return $user->id == $post->user_id;� });�}
Gates - Métodos
Gate::define('update-post', 'PostPolicy@update');
Gate::resource('posts', 'PostPolicy');
Gate::define('posts.view', 'PostPolicy@view');�Gate::define('posts.create', 'PostPolicy@create');
….
Gates - Autorización
if (Gate::allows('update-post', $post)) {� // El usuario actual puede actualizar el post.�}��if (Gate::denies('update-post', $post)) {� // El usuario actual no puede actualizar el post.�}
if (Gate::forUser($user)->allows('update-post', $post)) {� // El usuario puede actualizar el post.�}
Policy - Creación
php artisan make:policy TaskPolicy --model=Task
Policy - Registración
Ejemplo:
protected $policies = [� Task::class => TaskPolicy::class,� ];
Policy - Definición
Ejemplo:
public function update(User $user, Task $task)� {� return $user->id === $task->user_id;� }
Policy - Sin Modelo
public function create(User $user)�{� //�}
Policy - Filtros
public function before($user, $ability)�{� if ($user->isSuperAdmin()) {� return true;� }�}
Policies - Usando modelos
if ($user->can('update', $task)) {� //�}
if ($user->can('create', Task::class)) {� // Ejecuta el método "create" de la policy correspondiente�}
Policies - Usando Middlewares
Route::put('/task/{task}', function (Task $task) {� // El usuario actual puede actualizar la tarea�})->middleware('can:update,task);
Route::post('/task, function () {� // EL usuario actual puede crear tareas.�})->middleware('can:create,App\Task);
Policies - Dentro del Controller
public function update(Request $request, Task $task)� {� $this->authorize('update', $task);�� // El usuario actual puede actualizar la tarea.� }
public function create(Request $request)�{� $this->authorize('create', Task::class);�� // El usuario actual puede crear una tarea.�}
Policies - Blade Templates
@can('update', $task)� <!-- El usuario actual puede actualizar la tarea -->�@elsecan('delete', $task)� <!-- El usuario actual puede borrar la tarea -->�@endcan��@cannot('update', $task)� <!-- El usuario actual no puede actualizar la tarea -->�@elsecannot('delete', $task)� <!-- El usuario actual no puede borrar la tarea -->�@endcannot
Policies - Blade Templates
@can('create', App\Task::class)� <!-- El usuario actual puede crear Posts -->�@endcan��@cannot('create', App\Task::class)� <!-- El usuario actual no puede crear Posts -->�@endcannot
Referencias