JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources
Alternate solution for raising `JSONAPI::Exceptions::InvalidFieldValue` in `replace_fields`?
Personne n'a encore pris cette issue.
- Langage dominant
- Ruby
- Étoiles
- 2.3k
- Forks
- 546
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
I'm currently using a callback before save to handle authorization.
module V1
class BaseResource < JSONAPI::Resource
# ...
set_callback :save, :before, :authorize
# ...
end
end
I verify that authorization has been performed on each action in the ApplicationController:
class ApplicationController < JSONAPI::ResourceController
# ...
after_action :verify_policy_authorized, except: [:index]
def verify_policy_authorized
raise PolicyAuthorizationNotPerformedError unless policy_authorized?
end
# ...
end
Unfortunately, if an invalid value is submitted for an enum attribute the before save callback never happens because a JSONAPI::Exceptions::InvalidFieldValue is raised in _replace_fields. This causes verify_policy_authorized to not be called which raises the PolicyAuthorizationNotPerformedError.
I could obviously hack in a fix, but I wondered if this was a sign that a more general approach would be better. For example, should we provide a hook into exceptions raised and rescued which would allow the user of jsonapi-resources to handle things like bypassing policy authorization?
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par suivre le chemin de validation de l’enum via _replace_fields et JSONAPI::Exceptions::InvalidFieldValue, puis examinez le callback de sauvegarde dans V1::BaseResource ainsi que verify_policy_authorized dans ApplicationController. L’issue propose un hook général pour les exceptions, mais ne définit ni le comportement du hook ni un test concret d’achèvement.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rails, ruby
- Domaine
- api, backend
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 25/100