Попытка помочь вам, как часть документации:
С Pundit вы можете контролировать, какие атрибуты пользователь имеет доступ к обновлению через ваши политики.Вы можете настроить метод allow_attributes в своей политике следующим образом:
# app/policies/post_policy.rb
class PostPolicy < ApplicationPolicy
def permitted_attributes
if user.admin? || user.owner_of?(post)
[:title, :body, :tag_list]
else
[:tag_list]
end
end
end
Существует также помощник, который может управлять разрешениями для каждого действия
permitted_attributes(record, action = action_name)
, который можно использовать вместо.
Или, наиболее вероятно, вы хотите использовать области, которые определяют доступ к определенным атрибутам.
Из документации по областям:
Часто вам понадобитсяиметь некоторый вид списка записей, к которым у определенного пользователя есть доступ.При использовании Pundit вы должны определить класс, называемый областью действия политики.Это может выглядеть примерно так:
class PostPolicy < ApplicationPolicy
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
if user.admin?
scope.all
else
scope.where(published: true)
end
end
end
def update?
user.admin? or not record.published?
end
end