Как использовать оператор is_in для декларативной_авторизации? - PullRequest
1 голос
/ 18 января 2010

У меня есть то, что мне кажется простым declarative_authorization правилом, но я уверен, что только моя новизна вызывает у меня проблемы с его работой.

У меня есть пользователь игруппа.Группа имеет много-к-одному отношение с пользователем.С определенным классом (: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

1 Ответ

1 голос
/ 01 февраля 2010

Я действительно не так много копал в Declarative_auth, но правила вроде бы в порядке. Судя по журналу, кажется, что order by created_at является неоднозначным, так как в таблице 'groups' также есть столбец «create_at».

Не знаю, как это исправить, но я думаю, что оно должно сказать order by t0_r7 или order by t1_r2, так как это псевдонимы, заданные столбцам create_at; Я не знаю, имеет ли это значение для вас, какой вы используете.

...