vamos a hacer uso de las clases policy de laravel para programar accesos
hacia algunas funcionalidades del sitio
entonces la idea final es que un usuario pueda editar/actualizar sus propios datos
y tambien que un usuario con rol admin pueda hacerlo para cualquiera.
1) crear la clase UserPolicy
php artisan make:policy UserPolicy
este comando creara la clase app/policies/UserPolicy.php
2) registrar la relacion del modelo User con la clase UserPolicy
ir a app/Providers/AuthServiceProvider.php
protected $policies = [
'App\User' => 'App\Policies\UserPolicy',
];
3) en UserPolicy.php crear la function before, que se llamara antes de cualquier otra declarada en la clase. Aqui se evaluara si el usuario logueado es admin y si es verdadero devuelve true, salteando la evaluacion de las otras funciones. De lo contrario, llama a la function correspondiente para que haga la evaluacion de si el usuario logueado es el mismo que se quiere editar/actualizar.
public function before($user,$ability){
if($user->hasRoles(['admin'])){
return true;
}
}
public function edit(User $authUser, User $user){
return ($authUser->id == $user->id);
}
public function update(User $authUser, User $user){
return ($authUser->id == $user->id);
}
public function destroy(User $authUser, User $user){
return ($authUser->id == $user->id);
}
4)en UserController exceptuar la validacion para los casos de edit y update
public function __construct(){
//$this->middleware(['auth','checkRoles:admin,moderador']);
$this->middleware('auth');
$this->middleware('checkRoles:admin,moderador',['except'=>['edit','update']]);
}
5)en UserController llamar desde las functiones de edit y update
a la function authorize para que dispare las validaciones del UserPolicy
public function edit($id)
{
$user = User::findOrFail($id);
$this->authorize($user);
return view('users.edit',compact('user'));
}
public function update(UpdateUserRequest $request, $id)
{
$user = User::findOrFail($id);
$this->authorize($user);
$user->update($request->all()) ;
return redirect()->route('users.index');
}
Suscribirse a:
Enviar comentarios (Atom)
linux ubuntu mint actualizar chrome
desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable
-
por consola y desde la raiz de tu proyecto php artisan --version
-
en nuestro proyecto creamos una carpeta llamada donde estaran todas nuestras clases, por ejemplo una llamada: MiApp adentro de esta irian b...
-
Integridad al nivel de la base de datos Oracle Oracle valida la integridad de la base de datos y presenta los siguientes mensajes de erro...
No hay comentarios:
Publicar un comentario