質問

ユーザーが「できない!」というメッセージをレンダリングする許可がある場合に呼び出された場合、「ust_have_permission_to_write」のようなフィルターの前に欲しいそして戻る。

問題は、「アクションごとに 1 回しかレンダリングまたはリダイレクトできない」ということです...before フィルターで実行を停止するにはどうすればよいですか?ありがとう

役に立ちましたか?

解決

私は、最も簡単な答えは、リダイレクトを追加し、must_have_permission_to_writeメソッドにfalseを返すと思います。

def must_have_permission_to_write
  unless current_user.has_permission?(something)
    redirect_to access_denied_path 
    return false
  end
end

次に、ルートを追加し、どこかで拒否されたアクセスのためのアクションを作成し、テンプレートであなたが望むものは何でも入れます。

他のヒント

ここの投稿についていくつか気づいた点があります。

  • before フィルターで render または redirect を呼び出すと、アクションがキャンセルされます。Rails がこれを行わなかった時期もありましたが、私の知る限り、現在はこれが自動的に行われています。オンラインではこれに関する参照が見つからないようです。私が間違っている場合は誰かが私を修正してください。
  • 実際にアクション内にいる場合、「and return」を使用すると、アクションをキャンセルする優れた方法になります。上記の例では、メソッドは before フィルターとして定義されています (つまり、別々のメソッド) メソッドの最後で「and return」を呼び出すことはあまり役に立ちません。
  • 誰かに「そんなことはできない」と言うべきではないと思います。それはあまり安全な行為ではありません。誰かが許可されていないものを要求した場合、応答は 404 である必要があります。そのように応答すると、この「好奇心旺盛な」人に過剰な情報を与えてしまうことになります。

ただ、やって同じように、and returnを追加します:

before_filter :must_have_permission_to_write

def must_have_permission_to_write
  redirect_to login_path and return unless current_user
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top