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