2009-08-07 6 views
0

Mon application a une partie utilisateur et/une partie admin. Il y a 2 modèles Compte (comme un client) et Admin, et je devrais authentifier le compte et l'admin séparément. Les administrateurs ne doivent pas accéder à la partie du compte et les comptes ne doivent pas accéder à la zone d'administration. Y at-il une solution pour moi ou je devrais écrire 2 applications différentes pour les utilisateurs et les administrateurs, puis attendre Merb 1.1 et les monter d'une manière ou d'une autre dans une application? Des idées?Question d'authentification Merb

Répondre

1

votre question me semble très intéressante, j'ai eu les mêmes problèmes au début. Donc, je peux suggérer différentes solutions parmi lesquelles vous pouvez en choisir une dépend de la structure de votre application.

  1. Si tous vos utilisateurs appartient à une classe, mais a champ spécial (comme UserClass = (: client,: modérateur,: admin, etc.) ont `ll minimum de modifications d'application, il suffit de cocher la classe utilisateur Paramètre dans vos contrôleurs/vues Je pense que ce n'est pas une bonne idée pour vous

  2. Meilleure pratique - pour utiliser les stratégies d'authentification Merb Il s'agit d'un mécanisme très flexible, vous pouvez donc sélectionner les classes avec lesquelles vous voulez travailler

Par exemple, vous aurez 2 stratégies de base: C lientAuth, AdminAuth. Les deux utiliseront des classes d'utilisateurs différentes (Client, Admin). Tout ce que vous avez besoin - créer le fichier de stratégie personnalisée, puis connectez-le à votre routeur comme ceci:

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

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

Ou, vous pouvez utiliser l'authentification dans le contrôleur:

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

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

, vous aussi pouvez même utiliser un seul contrôleur pour l'authentification pour les deux classes en utilisant les deux stratégies comme ceci:

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

Tout simplement parce que vous avez défini les différentes classes d'authentification (Admin, client) pour vos stratégies que vous wi seront en mesure d'obtenir des informations à ce sujet: session.user.class (il est une méthode rubis de base pour connaître le nom de la classe d'objet)

Voici quelques liens utiles:

  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