2014-12-17 2 views
3

Когда я создаю новый эшафот, я бы хотел использовать его по умолчанию для конфигурации pundit, которая доступна в app/policies/application_policy.rb. Без создания model_name_policy.rb Я всегда получаю unable to find policy ошибок.Как использовать стандартное приложение/политики/application_policy.rb?

Как использовать значения по умолчанию, когда я не устанавливал правила для конкретной модели?

+0

Вы когда-нибудь находили решение? Я в той же ситуации и интересуюсь вашим окончательным подходом. – geoboy

ответ

1

Я не знаю способа без создания политики для каждой модели, но вы можете создать политику, которая наследуется от вашей политики приложения. Ваш ApplicationPolicy может выглядеть примерно так:

class ApplicationPolicy 
    def index? 
    true 
    end 

    def show? 
    true 
    end 

    ... More actions ... 
end 

При создании новой лески, просто добавьте пустую политику, которая наследуется от вашей политики применения:

class UserPolicy < ApplicationPolicy 

end 

Действие унаследует от ApplicationPolicy. При необходимости вы всегда можете отменить значения по умолчанию:

classUserPolicy < ApplicationPolicy 
    show? 
    @user.admin == true ? true : false 
    end 
end 

Надеюсь, это поможет!

+0

Спасибо за советы. Я ищу истинный дефолт, когда мне не нужно создавать файл политики для нового класса. – wintermeyer

+0

Вы нашли это? –

2

Самый простой способ сделать это, вероятно, для спасения от Pundit::NotDefinedError, поднятого Pundit::PolicyFinder#policy!.

Учитывая вашу политику по умолчанию:

# app/policies/application_policy.rb: 
ApplicationPolicy = Struct.new :user, :record do 
    def index? 
    true 
    end 

    def show? 
    true 
    end 

    # ... other sensible defaults 

end 

Предполагая, что вы используете это в контроллере Rails:

# app/controllers/application_controller.rb: 
class ApplicationController 
    include Pundit 

    # ... 

    private 

    def policy(record) 
    super 
    rescue Pundit::NotDefinedError 
    ApplicationPolicy.new pundit_user, record 
    end 
end 

Отказ от ответственности: я должен также заявить, что создание неявных политики по умолчанию is generally frowned upon. За исключением простейших случаев или с самыми пессимистическими значениями по умолчанию (все ложные), слишком легко преодолеть чрезмерно разрешительную политику.

 Смежные вопросы

  • Нет связанных вопросов^_^