「同様の質問」は、あなたがこのようなことをすることができると言っています
class YourModel < ActiveRecord::Base
attr_accessor :current_user
# ...
end
次に、コントローラーアクションで次のようなことを行うことができます
@your_model = YourModel.find(params[:id])
@your_model.current_user = current_user
@your_model.assign_attributes(params[:your_model])
if @your_model.valid?
# ...
その後、の検証メソッドself.current_user
内で使用できます。YourModel
私はこの「検証」を「承認」ほど考慮していないので、これがあなたがすべきことだとは思わないことに注意してください。YourModel
権限のないユーザーは、インスタンスへのそのような更新を保存できるアクションの一部を取得することさえできないはずです。
要求に応じてPunditで認証を行う場合は、次のファイルがあります。app/policies/your_model.rb
class YourModelPolicy < Struct.new(:user, :your_model)
def update?
user.some_privilege == true # change this to suit your needs, checking the "required privileges" you mention
end
end
あなたの中にPunditを含めるApplicationController
class ApplicationController < ActionController::Base
include Pundit
# ...
end
次に、コントローラーアクションで簡単に実行できます
def update
@your_model = YourModel.find(params[:id])
authorize @your_model
# ...
メソッドはのメソッドauthorize
を呼び出しYourModelPolicy
(デフォルトではアクションに一致するメソッドを呼び出します+ ) 、偽の値が返された場合は403エラーが発生します。update?
?