Защитить Deeplink для несанкционированной компании - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть мультитенантное приложение с компаниями, которые имеют много пользователей и много клиентов.Я защитил представления и контроллеры с помощью before_filters, чтобы current_user мог просматривать только клиентов, принадлежащих компании пользователя.Это работает нормально, неавторизованный пользователь получает сообщение «у вас недостаточно прав для этого действия».Но когда пользователь меняет URL-адрес, например, с «/ clients / 1 / edit» на «clients / 2 / edit», он может редактировать клиента из другой компании.Какой лучший способ защитить это?

1 Ответ

0 голосов
/ 05 декабря 2011

Расширьте свою стратегию и для защиты контроллера clients - вам нужно проверять владение клиентской записью при каждом действии, поскольку только некоторые люди должны иметь доступ к некоторым клиентам.

Вы должны быть в состоянии продолжить с любым решением, которое у вас есть. Еще один способ сделать это - использовать что-то вроде CanCan , которое централизует доступ и может сделать его намного проще и проще для отладки (и, что более важно, подтверждения через ваш набор тестов), которое доступно только пользователям доступ к тому, к чему они должны иметь доступ.

Вот список распространенных / популярных гемов авторизации для Rails, которые решают проблемы доступа пользователей к ресурсам.

Какой бы подход вы ни выбрали в конечном итоге, я не могу не подчеркнуть, насколько важно охватить такие вещи, как безопасный доступ, с помощью тестового покрытия. Он никогда не бывает идеальным (потому что вы можете забыть что-то тестировать), но он снизит вероятность того, что вы нарушите уже существующие ограничения доступа к безопасности, сохранив ваши связанные с безопасностью тесты как можно более современными.

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