Я использую Pundit для авторизации, я новичок в нем и ранее работал только с Cancan и Cancancan.
У меня есть индексная страница, на которой нет модели. Эта страница должна быть видна ТОЛЬКО для незарегистрированных пользователей (только для гостей).
Я могу только показать страницу для всех или никому.
application_policy.rb
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
false
end
def show?
false
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope.all
end
end
end
splash_controller.rb
class SplashController < ApplicationController
def index
authorize :splash, :index?
end
end
splash_policy.rb
class SplashPolicy < ApplicationPolicy
# def initialize(user, record)
# @user = user
# @record = record
# end
def index?
not user?
end
end
Я закомментировал новый метод инициализации, так как предполагаю, что мне нужно его переопределить, но я не совсем уверен в синтаксисе.
Я думаю, что pundit здесь немного неправильный подход, поскольку он построен для авторизации пользователей на определенные действия, а не для определения того, что вы видите, когда вы не вошли в систему.
Обычно это то, что я решаю с помощью логики контроллера, возможно, перенаправляя всех пользователей на какой-то другой путь, когда они вошли в систему на before_action
.
Вы все еще можете сделать это в эксперте, хотя, используя этот метод в безголовой политике ( https://github.com/varvet/pundit/blob/master/README.md#headless-policies).
def index?
user.blank?
end
На мой взгляд, Pundit - лучшая среда авторизации. Он простой, гибкий и имеет отличных сопровождающих. Так что дерзайте ;-)
Это прекрасно работает! Я также добавил строку: «raise Pundit :: NotAuthorizedError,« Вы должны войти в систему, если не пользователь », в мой метод инициализации ApplicationPolicy, чтобы сделать приложение закрытой системой. Теперь вы должны войти в систему, чтобы увидеть что-либо (кроме заставки), и только гости могут видеть заставку. Просто любопытно, не могли бы вы вместо этого использовать Cancancan, или стоит провести Pundit до конца?