Вопрос

Мое приложение имеет пользовательскую часть и часть /admin.Существует две модели учетной записи (например, клиента) и администратора, и мне следует аутентифицировать учетную запись и администратора отдельно.Администраторы не должны иметь доступ к части учетной записи, а учетные записи не должны иметь доступ к административной области.Есть ли какое-нибудь решение для меня, или мне следует написать 2 разных приложения для пользователей и администраторов, а затем дождаться merb 1.1 и как-то смонтировать их в 1 приложение?Есть идеи?

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

Решение

Ваш вопрос мне кажется очень интересным, вначале у меня были такие же проблемы.Итак, я могу предложить различные решения, из которых вы можете выбрать одно, в зависимости от структуры вашего приложения.

  1. Если все ваши пользователи принадлежат к одному классу, но имеют специальное поле (например, UserClass = (:client, :moderator, :admin и т. д.), у вас будет минимум модификаций приложения, просто проверьте параметр класса пользователя в ваших контроллерах/представлениях.Я думаю, что это не лучшая идея для тебя.

  2. Лучшая практика — использовать стратегии аутентификации Merb.Это очень гибкий механизм, поэтому вы можете выбирать классы, с которыми хотите работать.

Например, у вас будет 2 основные стратегии:КлиентАут, АдминАут.Оба они будут использовать разные классы пользователей (Клиент, Администратор).Все, что вам нужно — создать собственный файл стратегии и затем подключить его к маршрутизатору следующим образом:

authenticate(ClientAuth) do
  match('/profile').to(:controller => ProfileController)
end

authenticate(AdminAuth) do
  match('/admin').to(:controller => AdminController)
end

Или вы можете использовать аутентификацию внутри контроллера:

class AdminController
  :before ensure_authenticated, :with => [AdminAuth]

  def index
     ... your stuff ...
  end
end

Кроме того, вы даже можете использовать только один контроллер для аутентификации для обоих классов, используя обе стратегии следующим образом:

class AdminController
  :before ensure_authenticated, :with => [AdminAuth, ClientAuth]
end

Просто потому, что вы установили разные классы аутентификации (Администратор, Клиент) для своих стратегий, вы сможете получить информацию об этом:session.user.class (это базовый метод Ruby для определения имени класса объекта)

Вот несколько полезных ссылок:

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. http://merbunity.com/tutorials/19
  3. http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
  4. http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top