Каков наилучший способ безопасного добавления административного доступа на мой сайт rails? - PullRequest
4 голосов
/ 04 июня 2009

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

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

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

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

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

Спасибо!

Ответы [ 3 ]

5 голосов
/ 04 июня 2009

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

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

2 голосов
/ 04 июня 2009

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

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

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

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

2 голосов
/ 04 июня 2009

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

private
def authorized?
  user.admin?
end

или

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

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

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

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