代码之家  ›  专栏  ›  技术社区  ›  dpb

如何使用声明性_授权的is_in运算符?

  •  1
  • dpb  · 技术社区  · 16 年前

    declarative_authorization 规则,但我确信,正是我的新鲜感让我在工作中遇到了问题。

    我有一个用户和一个组。组与用户之间存在多对一关系。某一类( :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
    
    1 回复  |  直到 13 年前
        1
  •  1
  •   Jawa user2675589    16 年前

    我真的没有深入研究声明性的_auth,但规则似乎还可以。根据日志,似乎 order by created_at

    我不知道如何解决这个问题,但我认为应该说 order by t0_r7 order by t1_r2 因为这些是在列中为created_指定的别名;我不知道你用哪个对你是否重要。