Как реализовать Row Level Security в Rails? - PullRequest
1 голос
/ 19 марта 2012

Я тестировал Rails в последние месяцы, и это круто!Но у меня есть проблема с тем, как сделать RLS (безопасность на уровне строк), что очень важно для меня.Я подумал, что должен использовать обратные вызовы ActiveRecord, но они могут быть запущены до или после изменения состояния объекта, как они говорят.

Я собираюсь использовать PostGresSQL, поэтому я должен использовать Views, чтобы позволить конкретному пользователю / организации видеть только его строки, но я бы предпочел реализовать логику моего RLS в рельсах, а не помещать его непосредственно в мою БД...

Ответы [ 5 ]

2 голосов
/ 29 августа 2012

Сейчас я работаю над проектом, который использует Грант .Хотя он и не невероятно зрелый, он, кажется, довольно неплохо блокирует вещи в моделях, а не в контроллерах, в которых большинство других модулей безопасности для Rails требуют от вас логики.

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

При этом для небольшого проекта я использую CanCan , и этоработает хорошо, если вы осторожны, чтобы не включать ресурсы в представления, которые не проверены.

В любом случае вам потребуется система аутентификации для входа и выхода пользователей.Их несколько: Devise, пожалуй, наиболее широко используемый.

1 голос
/ 19 марта 2012
0 голосов
/ 15 марта 2014

В итоге я использовал user_id из аутентификации Devise, так как добавил его в таблицы базы данных, где я хотел ограничить по строке.

Я написал кое-что по этому адресу: http://marktmilligan.tumblr.com/post/78996534776/adding-row-level-security-to-your-rails-app

0 голосов
/ 06 февраля 2013

Взгляните на Heimdallr . Это потрясающий подход к ограничениям на уровне модели. Работает с ActiveRecord и Mongoid .., а также просто расширяемый.

0 голосов
/ 19 марта 2012

Если для «безопасности на уровне строк» ​​вы имеете в виду, что пользователь может получить доступ к определенной строке на основе его роли для выбранной строки, которую вы могли бы посмотреть на Declarative_authorization (RailsCast) , это позволяет вам определить правила доступа с использованием высокоуровневой DSL. Вы даже можете определять правила, основываясь на значениях атрибутов "rows".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...