开发者

Ruby: Declarative_authorization polymorphic associations

开发者 https://www.devze.com 2023-01-14 04:32 出处:网络
I have two models (Item and Theme).They are both owned by a third model Users with a has_many association (User has many Themes and Items). Both Item and Theme have_many :images.

I have two models (Item and Theme). They are both owned by a third model Users with a has_many association (User has many Themes and Items). Both Item and Theme have_many :images.

The Image model is a polymorphic association so the table has the columns imageable_id and imageable_type. If I had both an Item with ID 1 and a Theme with I开发者_StackOverflow中文版D 1 the table would look like

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

I'm using declarative_authorization to re-write the SQL queries of my database to keep users from accessing items outside their account. I'd like to write an authorization rule that will allow a user to read an image only if they can read the item they own. I can't seem to get the correct syntax (perhaps it's not supported):

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

Then I'd have another rule mimicking the above but for themes:

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

Any ideas? Thanks in advance!

  • Corith Malin


It seems that you commit a mistake in has_permission_on method

As I checked over has_permission_on and if_attribute

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

Hope this Help You !!!

0

精彩评论

暂无评论...
验证码 换一张
取 消