Как использовать оператор is_in декларативной_авторизации?

StackOverflow https://stackoverflow.com/questions/2083751

Вопрос

У меня есть то, что мне кажется простым 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
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top