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


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

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

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

Есть еще предложения? Сейчас мне просто нужно защитить страницу или две, поэтому я даже заглянул в HTTP basic или digest authentication как временную меру (защищенный контент на самом деле не так уж и важен). Но... Я не знаю, как реализовать http auth для конкретных действий, я только видел, как реализовать его, чтобы предотвратить доступ к каталогу.

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

Спасибо!

3 4

3 ответа:

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

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

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

private
def authorized?
  user.admin?
end

Или

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

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

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

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

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

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

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