Как лучше всего безопасно добавить административный доступ к моему веб-сайту Rails?

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

Вопрос

Я думаю, что ответ — войти в систему с правами администратора, а затем проверить, есть ли у пользователя флаг администратора, но я также подумал о некоторых других связанных с этим вопросах.

Лучше ли иметь флаг администратора (attr_protected) в той же таблице пользователей, что и не администраторы?или мне следует иметь таблицу пользователей-администраторов?

Должен ли я создать отдельное приложение Rails для пользователей-администраторов?Это может быть излишним, поскольку им обоим придется иметь доступ к одной и той же базе данных (не говоря уже о том, что настройка может оказаться очень сложной).

Есть еще предложения?Прямо сейчас мне просто нужно защитить одну или две страницы, поэтому я даже рассмотрел базовую HTTP-аутентификацию или дайджест-аутентификацию в качестве временной меры (защищенный контент на самом деле не НАСТОЛЬКО приватный/важный).Но...Я не знаю, как реализовать HTTP-аутентификацию для конкретных действий, я видел только, как реализовать ее для предотвращения доступа к каталогу.

Любое направление и обсуждение было бы здорово.Я уверен, что это обсуждение принесет пользу другим пользователям Stack Overflow.

Спасибо!

Это было полезно?

Решение

У Райана Бейтса есть отличная серия Railscasts из трех частей на эту тему, которая должна дать вам пищу для размышлений:

Также есть три Railscasts по разным методам аутентификации:

Другие советы

я использую плагин restful_authentication для этой цели.А ограничить доступ к любому контроллеру или любому методу очень просто.Например, в контроллере добавьте эту функцию:

private
def authorized?
  user.admin?
end

или

private
def authorized?
  user.admin? if update? || create?
end

Я определил администратора?метод в моей модели пользователя.Я также создал обновление?и создать?методы, которые проверяют, какое действие было вызвано.В restful_authentication авторизовано?метод всегда запускается при доступе к контроллеру.

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

Я думаю, это зависит от типа администрации.

Если вид сайта у ваших администраторов такой же, как у обычного пользователя, но с дополнительными привилегиями, я бы выбрал флаг администратора.(Или, по мере расширения ваших потребностей, полноценную таблицу ролей.) Это ситуация, когда все видят одно и то же, но администраторы имеют доступ к различным действиям (удалить?редактировать?запретить?и т. д.), чего нет у обычных пользователей.

Если представление, необходимое вашим администраторам, сильно отличается от обычного сайта, я бы порекомендовал совершенно отдельное приложение Rails, которое обращается к той же базе данных.Например, если ваши «администраторы» на самом деле являются сотрудниками службы поддержки, которые собираются отвечать на телефонные звонки или решать вопросы по счетам, у них могут быть совершенно разные представления о базе данных (и, возможно, способы редактирования данных), недоступные в обычное приложение.

Недостаток наличия нескольких сайтов заключается в том, что модели (проверки, ассоциации и т. д.) могут рассинхронизироваться.Недостаток одного сайта заключается в том, что вы можете в конечном итоге вставить всевозможный уродливый код «if-admin» в ранее простые для понимания части вашего сайта.С какой проблемой легче справиться, зависит от ваших требований.

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