Ваш вопрос мне кажется очень интересным, у меня были такие же проблемы в начале. Поэтому я могу предложить различные решения, из которых вы можете выбрать одно, в зависимости от структуры вашего приложения.
Если все ваши пользователи принадлежат к одному классу, но имеют специальное поле (например, UserClass = (: client,: moderator,: admin и т. Д.), У вас будет минимум модификаций приложения, просто проверьте параметр класса пользователя в ваших контроллерах / взглядах. Я думаю, что это не очень хорошая идея для вас.
Лучшая практика - использовать стратегии аутентификации Merb. Это очень гибкий механизм, поэтому вы можете выбирать классы, с которыми хотите работать.
Например, у вас есть 2 основных стратегии: ClientAuth, AdminAuth. Оба они будут использовать разные пользовательские классы (Client, Admin). Все, что вам нужно - создать файл пользовательской стратегии и затем подключить его к маршрутизатору следующим образом:
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
Только потому, что вы установили разные классы аутентификации (Admin, Client) для своих стратегий, вы сможете получить информацию об этом: session.user.class (это основной метод ruby, чтобы узнать имя класса объекта)
Вот несколько полезных ссылок:
- http://www.slideshare.net/hassox/merb-auth-presentation
- http://merbunity.com/tutorials/19
- http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
- http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy