私は最近、宝石のREADMEを読んで、コントローラ内のインデックスビューを承認しないことに気付きました。 (代わりにスコープを使用します)。インデックス内のPundit権限
索引ページには一般に要素のリストが含まれており、生成されたリストを制御することで、ページ上のデータを効果的に制御するため、これらは良い理由があります。ただし、索引ページ自体へのアクセスをブロックすることが必要な場合もあります。 (空白のインデックスページへのアクセスを許可するのではなく)私の質問は、これを実行する適切な方法は何でしょうか?
私はこれまで、いくつかの可能性を思い付くし、次のクラスを持っている:私のインデックスで
- モデル
MyModel
- コントローラ
MyModelsController
- ポリシー
MyModelPolicy
私のコントローラの方法では、これを解決するための推奨される方法は次のようになります:
def index
@my_models = policy_Scope(MyModel)
end
これにより、インデックスページへのアクセスが許可されますが、使用結果が表示できるもののみにフィルタリングされます。 (EGには無いのアクセスになりません。)しかし
は、私は2つの異なる可能性に到着したインデックス・ページ自体へのアクセスブロックするために:def index
@my_models = policy_Scope(MyModel)
authorize @my_models
end
または
def index
@my_models = policy_Scope(MyModel)
authorize MyModel
end
これらのだろうが正しいパスか、それとも優先される別の選択肢がありますか?
は、基準作成のためかどうかは何ですか?スコープが空であるかどうか – Leito
私は同じ問題を抱えてきました。私は間違っているかもしれませんが、ポイントは、インデックスページへのアクセスをブロックするのは、Punditの仕事ではないということです。認可の観点から、空の索引ページを持つことは、索引を持たないことと同じです。ユーザーはレコードを見る権限がありません。場合によっては、あなたの場合のように、ユーザーはインデックスページへのリンクも見てはいけませんが、_autability_懸念事項ではなく_usability_懸念事項なので、Punditのビジネスではありません。 – abl