1

私には単純なルールのように思えるものがありますがdeclarative_authorization、それを機能させるのに問題を引き起こしているのは私の新しさだけだと確信しています。

ユーザーとグループがあります。グループは、ユーザーと多対1の関係にあります。特定のクラス(:asset)には、ユーザーとグループを関連付けることができます。:assetユーザーが:assetオブジェクトグループのメンバーである場合、オブジェクトへの承認を決定したいと思います。基本的に、UNIXファイルシステムのセキュリティモデルについて考えてみてください。

これが私が書いたルールです:

has_permission_on [:assets], :to => :manage do
  if_attribute :user => is { user }
  if_attribute :group => is { user.default_group }

  # Idea:
  # if_attribute :group => is_in { user.groups }

end

コードに「アイデア」を含めたいのですが、エラーが発生します。私がやっているのはばかげたことだと確信していますが、何がわからないのですか?

SQLite3::SQLException: ambiguous column name: created_at: 
    SELECT "assets"."id" AS t0_r0, "assets"."friendly_id" AS t0_r1, "assets"."purchased_on" AS t0_r2, "assets"."description" AS t0_r3, "assets"."model" AS t0_r4, "assets"."serial" AS t0_r5, "assets"."user_id" AS t0_r6, "assets"."created_at" AS t0_r7, "assets"."updated_at" AS t0_r8, "assets"."group_id" AS t0_r9, "groups"."id" AS t1_r0, "groups"."name" AS t1_r1, "groups"."created_at" AS t1_r2, "groups"."updated_at" AS t1_r3 
    FROM "assets"  
    LEFT OUTER 
    JOIN "groups" 
    ON "groups".id = "assets".group_id 
    WHERE ((1=1) OR ("assets"."user_id" = 1) OR ("groups"."id" IN (1,2,3)))  
    ORDER BY created_at DESC 
    LIMIT 10 
    OFFSET 0
4

1 に答える 1

1

私は実際にはdeclarative_authをあまり掘り下げていませんが、ルールは問題ないようです。ログに基づくとorder by created_at、「groups」テーブルにも「created_at」列があるため、はあいまいなようです。

それを修正する方法はわかりませんが、created_at列に与えられたエイリアスであるorder by t0_r7と言うべきだと思います。order by t1_r2あなたがどちらを使うかがあなたにとって重要かどうかはわかりません。

于 2010-02-01T09:04:35.293 に答える