first(); else $usuario = Usuario::where('id', $id)->first(); if(!$usuario) throw new ModelNotFoundException("usuario", $id); return $usuario; } public function isGlobalAdmin() { return $this->hasRole('global_admin'); } public function isAdmin() { return $this->hasRole('admin'); } public function hasRole($role) { return in_array($role, $this->roles); } public function isOnRestaurante($restaurante) { if($this->isGlobalAdmin()) return true; 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'); } public function zonasProduccion() { return $this->belongsToMany(ZonaProduccion::class, 'productores', 'usuario_id', 'zona_produccion_id'); } public function getRolesAttribute() { $auth0Service = app(Auth0Service::class); $auth0User = $auth0Service->getUser($this->auth0_id); return $this->attributes['roles'] = array_key_exists('app_metadata', $auth0User) ? $auth0User['app_metadata']['roles'] : []; } }