Movidas validaciones de usuario al modelo de usuario

This commit is contained in:
2021-04-30 02:51:08 -04:00
parent 2510261b63
commit d3c7c81661
2 changed files with 78 additions and 44 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\Restaurante;
use App\Models\Usuario;
use App\Services\Auth0Service;
use Illuminate\Http\JsonResponse;
@@ -54,24 +55,23 @@ class UsuariosController extends Controller {
'restaurant' => 'required|exists:restaurantes,id',
]);
$restaurant = $request->input('restaurant');
/** @var Usuario $logged_user */
$logged_user = $request->user;
// solo un global admin puede crear usuarios en cualquier restaurant
if (!in_array('global_admin', $request->user->roles)) {
// si el usuario no es administrador no puede crear usuarios
if (!in_array('admin', $request->user->roles)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede tiene permisos para crear usuarios'
], 403);
}
// los administradores solo pueden crear usuarios en su propio restaurant
if (!$request->user->restaurantes->contains($restaurant)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede crear un usuario en un restaurant al que no pertenece'
], 403);
}
$restaurant = Restaurante::find($request->input('restaurant'));
if (!$logged_user->canManageUsers()) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no tiene permisos para crear usuarios'
], 403);
}
if (!$logged_user->hasPermissionsOnRestaurant($restaurant)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede crear un usuario en un restaurant al que no pertenece'
], 403);
}
$auth0 = app(Auth0Service::class);
@@ -92,13 +92,11 @@ class UsuariosController extends Controller {
], $auth0User['statusCode']);
}
$usuario = new Usuario();
$usuario->id = Uuid::uuid4();
$usuario->auth0_id = $auth0User['identities'][0]['provider'] . '|' . $auth0User['identities'][0]['user_id'];
$usuario->nombre = $request->input('nombre');
$usuario->save();
$usuario->restaurantes()->attach($restaurant);
$usuario = $restaurant->usuarios()->create([
'id' => Uuid::uuid4(),
'auth0_id' => $auth0User['identities'][0]['provider'] . '|' . $auth0User['identities'][0]['user_id'],
'nombre' => $request->input('nombre')
]);
return response()->json(["usuario" => $usuario]);
}
@@ -120,6 +118,8 @@ class UsuariosController extends Controller {
'roles.*' => ['sometimes', Rule::in(['admin', 'mesero', 'recaudador', 'productor'])],
]);
/** @var Usuario $logged_user */
$logged_user = $request->user;
$usuario = Usuario::findByIdOrAuth0Id($id);
if (!$usuario) {
@@ -129,27 +129,23 @@ class UsuariosController extends Controller {
], 404);
}
// solo un global admin puede modificar usuarios en cualquier restaurant
if (!in_array('global_admin', $request->user->roles)) {
// si el usuario no es administrador no puede modificar usuarios
if (!in_array('admin', $request->user->roles)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede tiene permisos para modificar usuarios'
], 403);
}
// los administradores solo pueden modificar usuarios en sus propio restaurantes
if ($request->user->restaurantes->intersect($usuario->restaurantes)->count() == 0) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no puede modificar un usuario en un restaurant al que no pertenece'
], 403);
}
if (!$logged_user->canManageUsers()) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no tiene permisos para modificar usuarios'
], 403);
}
if (!$logged_user->hasPermissionsOverUser($usuario)) {
return response()->json([
'error' => 'not_allowed',
'message' => 'El usuario no tiene permisos para modificar a este usuario'
], 403);
}
$metadata = [];
if ($request->input('roles'))
$metadata['roles'] = $request->input('roles');
if ($request->input('roles')) $metadata['roles'] = $request->input('roles');
$auth0 = app(Auth0Service::class);
$auth0User = $auth0->updateUser(
@@ -167,8 +163,7 @@ class UsuariosController extends Controller {
], $auth0User['statusCode']);
}
if ($request->input('nombre'))
$usuario->nombre = $request->input('nombre');
if ($request->input('nombre')) $usuario->nombre = $request->input('nombre');
$usuario->save();
return response()->json(["usuario" => $usuario]);