7


3

Ruby:Declarative_authorizationポリモーフィック関連

2つのモデル(アイテムとテーマ)があります。 これらは両方とも、has_manyアソシエーション(ユーザーは多くのテーマとアイテムを持っています)を持つ3番目のモデルユーザーが所有しています。 アイテムとテーマの両方がhave_many:imagesです。

画像モデルは多態的な関連付けであるため、テーブルには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

何か案は? 前もって感謝します!

  • コリス・マリン

1 Answer


0


  • has_permission_on *メソッドで間違いを犯したようです

私は以上のようにチェックhttps://github.com/stffn/declarative_authorization/blob/45e91af20eba71b2828c5c84066bcce3ef032e8a/lib/declarative_authorization/reader.rb#L277[has_permission_on]とhttps://github.com/stffn/declarative_authorization/blob/45e91af20eba71b2828c5c84066bcce3ef032e8a/lib /declarative_authorization/reader.rb#L397[if_attribute]

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

これがあなたを助けることを願っています!!!