使用声明授权的查询重写功能与巫术

时间:2013-11-21 17:48:48

标签: ruby-on-rails-3 declarative-authorization sorcery

我正在尝试在模型级别使用声明性授权,使用查询重写功能来过滤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 个答案:

答案 0 :(得分:0)

只是因为它帮助将来的任何人,我找到了答案。为了使声明式授权安全性在模型级别工作,我们需要将其添加到application_controller。

  before_filter :set_current_user
  protected
  def set_current_user
    Authorization.current_user = current_user
  end