Pergunta
Meu aplicativo tem parte do usuário e / parte de administração. Existem 2 modelos de conta (como um cliente) e Admin, e eu deveria autenticar conta e administrador separadamente. Administradores não deve parte e as contas da conta de acesso não deve acessar a área de administração. Existe alguma solução para mim ou eu deveria escrever 2 aplicações diferentes para usuários e administradores e depois esperar por merb 1.1 e montá-los de alguma forma em um aplicativo? Alguma idéia?
Solução
sua pergunta parece muito interessante para mim, i`ve teve mesmos problemas no início. Então, eu posso sugerir soluções diferentes a partir do qual você pode selecionar um depende de sua estrutura de aplicativo.
-
Se todos os seus usuários pertence a uma classe, mas tem de campo especial (como UserClass = (: cliente,: moderador,: admin, etc.) vais ter mínimo de modificações de aplicativos, basta verificar o parâmetro de classe de usuário em seus controladores / views. Eu acho que não é uma boa idéia para você.
-
As melhores práticas - a usar estratégias de autenticação Merb. É mecanismo muito flexível, de modo que você pode selecionar classes que você deseja trabalhar.
Por exemplo, vais ter 2 estratégias básicas: ClientAuth, AdminAuth. Ambos vão usar diferentes classes de usuário (cliente, admin). Tudo que você precisa - criar arquivo de estratégia personalizada e, em seguida, conectá-lo ao seu roteador como esta:
authenticate(ClientAuth) do
match('/profile').to(:controller => ProfileController)
end
authenticate(AdminAuth) do
match('/admin').to(:controller => AdminController)
end
Ou, você pode usar a autenticação dentro de controlador:
class AdminController
:before ensure_authenticated, :with => [AdminAuth]
def index
... your stuff ...
end
end
Além disso, você ainda pode usar apenas um controlador para autenticação para ambas as classes, usando ambas as estratégias como esta:
class AdminController
:before ensure_authenticated, :with => [AdminAuth, ClientAuth]
end
Só porque você definir diferentes classes de autenticação (administrador, cliente) para suas estratégias você será capaz de obter informações sobre ele: session.user.class (que é um método de rubi básica para descobrir o nome da classe de objeto)
Aqui está alguns links úteis: