policy
- это просто ярлык для поиска политики на основе ресурса, который вы ему передаете.
# Retrieves the policy for the given record.
#
# @see https://github.com/varvet/pundit#policies
# @param user [Object] the user that initiated the action
# @param record [Object] the object we're retrieving the policy for
# @raise [InvalidConstructorError] if the policy constructor called incorrectly
# @return [Object, nil] instance of policy class with query methods
def policy(user, record)
policy = PolicyFinder.new(record).policy
policy&.new(user, pundit_model(record))
rescue ArgumentError
raise InvalidConstructorError, "Invalid #<#{policy}> constructor is called"
end
На самом деле это просто сокращение от MyPolicy.new(user, record)
. Добавлять к нему опцию policy_class
было бы совершенно бессмысленно. Зачем динамически искать что-то, если вы уже знаете, что хотите?
authorize
on вызовет NotAuthorizedError, если не разрешено, и динамически вычислит действие, которое вы пытаетесь выполнить, поэтому имеет смысл иметь эту опцию .