2010-01-18 4 views
1

У меня есть то, что кажется мне простым правилом declarative_authorization, но я уверен, что это просто моя новизна, которая вызывает у меня проблемы с ее работой.Как использовать оператор is_in 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

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

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

+0

Спасибо, Jawa, это имеет смысл для меня с высокого уровня. Это дало мне достаточно данных, чтобы найти ответ ... В основном некоторые из моих моделей имели явные инструкции order_by и т. Д. Этим операторам order_by нужны их столбцы, соответствующие имени таблицы. Это имеет смысл. Я просто не связывал две ошибки. Поскольку decl_auth делает соединение за кулисами, я предполагал, что он тоже делает order_by. Но это был я! :( – dpb

Смежные вопросы