Ruby:Declarative_authorization多态关联

时间:2010-09-03 23:28:22

标签: ruby-on-rails ruby polymorphic-associations declarative-authorization

我有两个模型(项目和主题)。它们都归第三个模型所有,具有has_many关联的用户(用户拥有许多主题和项目)。项目和主题都有_many:images。

Image模型是一个多态关联,因此该表的列为imageable_id和imageable_type。如果我同时拥有ID为1的项目和ID为1的主题,则表格看起来像

id    imageable_id    imageable_type
------------------------------------
1     1               Item
2     1               Theme

我正在使用declarative_authorization来重写我的数据库的SQL查询,以防止用户访问其帐户之外的项目。我想编写一个授权规则,允许用户只有在他们可以阅读他们拥有的项目时才能阅读图像。我似乎无法获得正确的语法(也许它不受支持):

has_permission_on [:images], :to => [:manage], :join_as => :and do
  if_attribute :imageable => is { "Item" }
  if_permitted_to :manage, :items # Somehow I need to tell declarative_auth to imageable_id is an item_id in this case.
end

然后我会有另一个模仿上述规则的规则,但主题是:

has_permission_on [:images], :to => [:manage], :join_as => :and do
  if_attribute :imageable => is { "Theme" }
  if_permitted_to :manage, :themes # Somehow I need to tell declarative_auth to imageable_id is a theme_id in this case.
end

有什么想法吗?提前谢谢!

  • Corith Malin

1 个答案:

答案 0 :(得分:0)

您似乎在 has_permission_on 方法中犯了错误

我查看了has_permission_onif_attribute

  has_permission_on(:images, :to => :manage, :join_as => :and) do
    if_attribute :imageable => "Item"
    if_permitted_to :manage, :items
  end

希望这有助于你!!!