У меня есть несколько особых ресурсов в моем приложении, например .:Как я могу обеспечить контроль за отдельными ресурсами с помощью Pundit?
# routes.rb
MySite::Application.routes.draw do
resource :thing
end
# things_controller.rb
class ThingsController < ApplicationController
def edit
load_thing
end
def update
load_thing
if @thing.update_attributes(thing_params)
...
else
...
end
end
private
def load_thing
@thing ||= current_user.thing
end
def thing_params
params.require(:thing).permit(...)
end
end
Я задаюсь вопросом, как обеспечить обзорный политическое использование Pundit (before_action :verify_policy_scoped
был установлен в ApplicationController
).
Я не уверен, как сформировать свою сферу политики для особых ресурсов, а именно:
# thing_policy.rb
class ThingPolicy < ApplicationPolicy
Scope < Scope
def resolve
# What to do here...
# scope => ?
end
end
end
# things_controller.rb
def load_thing
# ...and what to do here
@thing ||= policy_scope(...)
end
По словам Pundit's docs:
... метод
resolve
... должен возвращать некоторые вид результата, который может быть повторен.
Однако, с особыми ресурсами, этот аргумент итерации не является действительно действительным и не существует области AR-стиля как таковой ... только одна запись.
У кого-нибудь есть предложения по поводу этого?