特定の条件に合致しなかった場合、処理を中断することがあります(オブジェクトがそのようなユーザーなどによって所有されていないなど)。Rails resource_controllerが中断していますか?
私はこれを使用する必要があります。私は はアクセス権が になる前にロードするオブジェクトを必要とするので、無効なアクセスであれば アクションを中断したい状況があるでしょう。
特定の条件に合致しなかった場合、処理を中断することがあります(オブジェクトがそのようなユーザーなどによって所有されていないなど)。Rails resource_controllerが中断していますか?
私はこれを使用する必要があります。私は はアクセス権が になる前にロードするオブジェクトを必要とするので、無効なアクセスであれば アクションを中断したい状況があるでしょう。
OKこれはRCで作業しているときに考えていたものです。
通常のRC活動のようなものです:
def show
load_object
before :show
response_for :show
rescue ActiveRecord::RecordNotFound
response_for :show_fails
end
だから、あなたはいくつかの条件が失敗した場合だけload_object後にショーを中断するとします。
私はRC :)を変更する以外の(考えることができると、それを行うための最善の方法は次のとおりです。を使用 before_filter 状態
あなたはbefore_filter
に言及されていると仮定:
どれrender
またはredirect
コールは、フィルタチェーンとアクションの実行を中止すべきです。だから、あなたのアクセスコントロールのフィルターを入れて、「もの」をロードしてから、エラーメッセージを表示してください(良いウェブカルマのための適切なステータスコードとw3cビートダウンを防ぐ)。
これはあまりにも難しくないと思っている限り、うまく動作するレールの別の領域です。
何か助けが必要ですか?
あなたが逃した、それは問題があるオブジェクトのセキュリティ(所有権)によって決定します。しかし、Vitalyはキャッシュされているので、フィルタの前に実際に使用することができます。 –
ヴィタリーのアプローチは、おそらく正しいですが、私はそう参考として掲載し、あまりにも面白いオーバーエンジニアリングのアプローチを持っている:フックの前に、AccessDeniedException を投げる時
これも同様です。
事前確認のためにbefore_filtersを書くことが非常に頻繁にある場合は、Aegisが便利です。 1つのファイルにアクセスルールを定義して、誰が何にアクセスできるかを一目で確認することができます。
また、resource_controllerとの容易な統合のために構築されました。
それは正しいと思う - 私はキャッシュされた事実を無視した。 –