Как лучше всего безопасно добавить административный доступ к моему веб-сайту rails?
Я думаю, что ответ-это логин администратора, а затем проверить, есть ли у пользователя флаг администратора, но я также подумал о некоторых других связанных вопросах.
Лучше ли иметь флаг администратора (attr_protected) в той же таблице пользователей, что и неадминистраторы? или у меня должна быть таблица пользователей admin?
Должен ли я создать отдельное приложение rails для пользователей admin? Это может быть излишним, так как им обоим придется обращаться к одной и той же базе данных (не говоря уже о том, что это может быть огромной болью для установки вверх).
Есть еще предложения? Сейчас мне просто нужно защитить страницу или две, поэтому я даже заглянул в HTTP basic или digest authentication как временную меру (защищенный контент на самом деле не так уж и важен). Но... Я не знаю, как реализовать http auth для конкретных действий, я только видел, как реализовать его, чтобы предотвратить доступ к каталогу.
Любое направление и обсуждение было бы замечательно. Я уверен, что другие пользователи переполнения стека выиграют от этого обсуждение.
Спасибо!
3 ответа:
У Райана Бейтса есть отличная трехчастная серия железнодорожных передач на эту тему, которая должна дать вам пищу для размышлений:
- Часть 1: Где Идет Администрирование
- Часть 2: Ограничение Доступа
- Часть 3: Супер Простая Аутентификация
Существует также три железнодорожных сообщения о различных методах аутентификации:
Я использую restful_authentication plugin для этой цели. И очень просто ограничить доступ к любому контроллеру или любому методу. На примере в контроллере добавьте эту функцию:
private def authorized? user.admin? end
Или
private def authorized? user.admin? if update? || create? end
Я определил админа? метод в моей пользовательской модели. Я тоже создал обновление? а творить? методы, которые проверяют, какое действие было вызвано. В restful_authentication разрешено? метод всегда запускается при обращении к контроллеру.
Я бы поместил все в одно приложение и в одна таблица (не создавайте таблицу пользователей и администраторов). Вы можете защитить флаг администратора в контроллере пользователей, разрешив устанавливать это значение только для существующих пользователей-администраторов.
Я думаю, что это зависит от типа администрации.
Если у ваших администраторов будет такой же вид сайта, как у обычного пользователя, но с дополнительными привилегиями, я бы выбрал флаг администратора. (Или, по мере того как ваши потребности расширяются, полноценная таблица ролей.) Это ситуация, когда все видят один и тот же материал, но администраторы имеют доступ к различным действиям (удалить? редактировать? запрет? и т.д.) что нормальные пользователи не делают.
Если вид, который нужен вашим администраторам, дико в отличие от обычного сайта, я бы рекомендовал совершенно отдельное приложение Rails, которое обращается к одной и той же базе данных. Например, если ваши "администраторы" на самом деле являются сотрудниками службы поддержки, которые будут отвечать на телефонные звонки или отвечать на вопросы о выставлении счетов, они могут иметь совершенно другие представления о базе данных (и, возможно, способы редактирования данных), которые недоступны в обычном приложении.
Недостатком наличия нескольких сайтов является возможность иметь модели (валидации, ассоциации и т. д.) выйти из синхронизации. Недостатком наличия одного сайта является то, что вы можете в конечном итоге вставить все виды уродливого кода "if-admin" в ранее легкие для понимания части вашего сайта. Какая проблема легче решается, зависит от ваших требований.