я делаю это в Пользовательской # Show зрения:рубин драгоценный камень Пандит не кажется, делать политику правильно
<% if policy(Gallery.new).create? %>
<%= link_to "Add a photo gallery for #{@user.name}", new_user_gallery_path(@user), class: 'btn btn-success' %>
<% end %>
и администратор может добавлять галереи любому пользователю. Но никто другой не может.
Здесь галерея Политик:
class GalleryPolicy < ApplicationPolicy
def create?
user.present? && (record.user == user || user.admin?)
end
def new?
create?
end
end
Здесь политики Применения:
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
true
end
def show?
scope.where(:id => record.id).exists?
end
def create?
user.present?
end
def new?
create?
end
def update?
user.present? && (record.user == user || user.admin?)
end
def edit?
update?
end
def destroy?
update?
end
def scope
record.class
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope
end
end
end
Как вы можете видеть, пользователь должен войти в системе, а запись должна принадлежать к ним, или они должны быть admin для них, чтобы создать галереи. Что я делаю не так?
Можете ли вы предоставить дополнительную информацию, пожалуйста? «Pundit, похоже, неправильно проводит политику», не помогает. «Администратор может добавлять галереи к любому пользователю, но никто другой не может». это требование или некорректная текущая функциональность? «пользователь должен войти в систему, и запись должна принадлежать им, или они должны быть администратором для создания галерей», да, это то, что говорит ваша политика. Каково ожидаемое поведение и каково текущее неправильное поведение? – deefour