Pregunta
Mi aplicación tiene parte de usuario y / parte del administrador. Hay 2 modelos de cuenta (como un cliente) y de administración, y deben autenticar la cuenta de administrador y por separado. Los administradores no deben tener acceso a una parte de la cuenta y las cuentas no deben tener acceso a área de administración. ¿Hay alguna solución para mí o yo debería escribir 2 aplicaciones diferentes para los usuarios y los administradores y luego esperar a merb 1.1 y montarlos de alguna manera en 1 aplicación? ¿Alguna idea?
Solución
pregunta parece muy interesante para mí, `ve tenían mismos problemas al principio. Por lo tanto, puedo sugerir soluciones diferentes de los que puede seleccionar uno depende de la estructura de su aplicación.
-
Si todos sus usuarios pertenece a una clase, pero tiene campo especial (como UserClass = (: cliente,: moderador, admin, etc.) `ll tener un mínimo de modificaciones de aplicaciones, simplemente marque el parámetro clase de usuario en sus controladores / puntos de vista. Creo que no es una buena idea para usted.
-
Las mejores prácticas - utilizar estrategias de autenticación Merb. Es mecanismo muy flexible, para que pueda seleccionar clases que desea trabajar.
Por ejemplo, `ll tener 2 estrategias básicas: clientAuth, AdminAuth. Ambos se utilizan diferentes clases de usuario (cliente), admin. Todo lo que necesitas - crear el archivo de estrategia personalizada y luego conectarlo al router como esto:
authenticate(ClientAuth) do
match('/profile').to(:controller => ProfileController)
end
authenticate(AdminAuth) do
match('/admin').to(:controller => AdminController)
end
O bien, puede utilizar la autenticación dentro del controlador:
class AdminController
:before ensure_authenticated, :with => [AdminAuth]
def index
... your stuff ...
end
end
Además, incluso se puede utilizar sólo un controlador para la autenticación para ambas clases utilizando tanto las estrategias como esta:
class AdminController
:before ensure_authenticated, :with => [AdminAuth, ClientAuth]
end
El hecho de que haya configurado diferentes clases de autenticación (Admin, Cliente) para sus estrategias de usted será capaz de obtener información al respecto: session.user.class (que es un método básico de rubí para averiguar el nombre de la clase de objeto)
Aquí hay algunos enlaces útiles: