Mas validaciones
This commit is contained in:
@@ -21,11 +21,7 @@ class UsuariosController extends Controller {
|
||||
* Obtiene de forma paginada los usuarios registrados en el backend
|
||||
*/
|
||||
public function all(Request $request) {
|
||||
if($request->user->isGlobalAdmin()) {
|
||||
$usuarios = Usuario::all();
|
||||
} else {
|
||||
$usuarios = Restaurante::all()->intersect($request->user->restaurantes);
|
||||
}
|
||||
$usuarios = $request->user->colegas();
|
||||
|
||||
$paginate = app(PaginatorService::class)->paginate(
|
||||
perPage: $request->input('per_page', 15),
|
||||
|
||||
30
backend/app/Http/Middleware/IsColegaMiddleware.php
Normal file
30
backend/app/Http/Middleware/IsColegaMiddleware.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use App\Exceptions\ModelNotFoundException;
|
||||
use App\Models\Usuario;
|
||||
|
||||
class IsColegaMiddleware {
|
||||
public function handle($request, Closure $next) {
|
||||
$loged_user = $request->user;
|
||||
$user = Usuario::findOrFail($request->route('id'));
|
||||
|
||||
if(!$loged_user->isColega($user)) {
|
||||
Log::debug('El usuario intento acceder a los datos de otro usuario que no es su colega', [
|
||||
'loged_user' => $loged_user->id,
|
||||
'user' => $user->id
|
||||
]);
|
||||
throw new ModelNotFoundException('usuario', $user->id);
|
||||
} else {
|
||||
Log::debug('El usuario accedio a los datos de otro usuario que si es su colega', [
|
||||
'loged_user' => $loged_user->id,
|
||||
'user' => $user->id
|
||||
]);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,23 @@ class Usuario extends Model {
|
||||
return $this->restaurantes()->where('id', $restaurante->id)->count() > 0;
|
||||
}
|
||||
|
||||
public function isColega($usuario) {
|
||||
return $this->colegas()->contains($usuario);
|
||||
}
|
||||
|
||||
public function colegas() {
|
||||
if($this->isGlobalAdmin()) return Usuario::all();
|
||||
|
||||
$restaurantes = $this->restaurantes;
|
||||
$colegas = collect([]);
|
||||
|
||||
foreach($restaurantes as $restaurant) {
|
||||
$colegas = $colegas->merge($restaurant->usuarios);
|
||||
}
|
||||
|
||||
return $colegas->unique('id');
|
||||
}
|
||||
|
||||
public function restaurantes() {
|
||||
return $this->belongsToMany(Restaurante::class, 'usuarios_restaurantes', 'usuario_id', 'restaurante_id');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user