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?

Foi útil?

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.

  1. 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ê.

  2. 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:

  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-apresentação
  4. http :? //merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html a = C00000025 & name = Estratégia
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top