JSONAPI-Resources / JSONAPI-Resources/jsonapi-resources

Alternate solution for raising `JSONAPI::Exceptions::InvalidFieldValue` in `replace_fields`?

オープン
#82 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Type: Maintenance
主要言語
Ruby
スター
2.3k
フォーク
546
PR マージ指標
30日以内にマージされた PR はありません

説明

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?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、_replace_fieldsJSONAPI::Exceptions::InvalidFieldValue を通る enum 検証パスを追跡し、その後 V1::BaseResource の save callback と ApplicationControllerverify_policy_authorized を確認してください。この issue は一般的な exception hook を提案していますが、hook の動作も具体的な完了テストも定義していません。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
rails, ruby
領域
api, backend
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。