如何为每个用户设置declarative_authorization

时间:2011-12-23 18:12:42

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

我有这两个模型:

class Photo < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :photos
end

并为角色设置了declarative_authorization

  role :reg_ser do
     has_permission_on :photos, :to => [:show] do
       if_attribute :user_id => is { user.id }
     end
  end

我希望允许用户显示他上传的图片 - 只显示他的图片。我的意思是,例如:

user_id | photo
      1 | 1
      1 | 2
      1 | 3
      2 | 4

当用户设置网址/photos/1时,只有当user_id显示此地址的1 user_id=2时,此图片才会显示,他看不到图像......

有可能做这样的事吗?

1 个答案:

答案 0 :(得分:0)

您需要输入类似

的内容
filter_access_to [:index, :new, :create]
filter_access_to [:show, :edit, :update], :attribute_check => true

在您的控制器中,类似

role :reg_ser do
  has_permission_on :photos, :to => [:index, :new, :create]
  has_permission_on :photos, :to => [:show, :edit: update] do
    if_attribute :user_id => is { user.id }
  end
end

进入authorization_rules.rb。因此,一切正常,重要的是在控制器中包含:attribute_check,以便检查要检查属性的每个操作。 我没有留下:index,因为通过添加

来显示当前用户的内容非常容易
def begin_of_association_chain
  current_user
end

或与控制器类似(这会导致InheritedResources将current_user.pictures作为集合)。

您可能也有兴趣阅读http://asciicasts.com/episodes/188-declarative-authorization