Использование функции перезаписи запросов декларативной авторизации с колдовством

Я пытаюсь использовать декларативную авторизацию на уровне модели, используя функцию переписывания запросов, чтобы отфильтровать варианты выбора HTML примерно так:

Модель:

class TreatmentClinic < ActiveRecord::Base

    def self.filtered_by_user_context
        with_permissions_to(:read)
    end
end

Вид (новое действие):

<%= form_for(@something) do |f| %>

      <%= f.select :id, TreatmentClinic.filtered_by_user_context.collect {|t| [ t.name, t.id ] }, {:include_blank => 'Please select'} %>

      <%= f.submit %>

<% end %>

authorization_roles.rb:

role :some_role do
    has_permission_on :treatment_clinics do
        to :read
        if_attribute :id => '1'
    end
end

Я использую колдовство, и оно прекрасно работает с декларативным разрешением; разрешения декларативной авторизации работают нормально на уровнях контроллера и представления, но вышеупомянутый выбор выдает эту ошибку:

 No matching rules found for [:read] for #<Authorization::AnonymousUser:0x007fd257c00090 @role_symbols=[:guest]> (roles [:guest], privileges [:read, :manage], context :treatment_clinics).

Есть идеи?

1 ответ

Решение

Просто если это поможет кому-нибудь в будущем, я нашел ответ. Чтобы декларативная безопасность авторизации работала на уровне модели, нам нужно добавить это в application_controller.

  before_filter :set_current_user
  protected
  def set_current_user
    Authorization.current_user = current_user
  end
Другие вопросы по тегам