2009-06-03 4 views
4

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

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

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

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

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

Спасибо!

ответ

5

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

Существует также три Railscasts по различным методам аутентификации:

+0

+1 для ryanb, любой новый разработчик рельсов должен смотреть свои скринкасты. – klochner

2

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

private 
def authorized? 
    user.admin? 
end 

или

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

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

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

2

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

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

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

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

+0

Если вы помещаете все админы в пространство имен администраторов, вам не нужно добавлять какой-либо «if-admin» к вашему коду, и вы получаете один набор моделей, одно приложение (меньше ресурсов, используемых на сервере) и т. Д. – klew