2

Je suis en train de créer une application rails où la connexion est optionnelle. En d'autres termes, beaucoup des mêmes actions/vues/contrôleurs/pages fonctionneront connectés ou déconnectés. Vous obtenez simplement plus de fonctionnalités si vous êtes connecté (comme l'application se souvient de ce que vous avez fait). J'utilise actuellement restful_authentication et role_requirement, et je me demande quel niveau utiliser. Je pourrais ajouter un nouveau rôle "utilisateur" que tous les utilisateurs connectés, par exemple, puis require_role "user" et avoir des blocs de vue en utilisant @user.has_role? ... ou je pourrais améliorer le côté authentification des choses et faire des vérifications pour voir si l'utilisateur est authentifié. Ou je pourrais faire autre chose. Existe-t-il un moyen standard de gérer cela dans les rails?Comment gérer la connexion optionnelle dans les rails

Répondre

1

Vous intégrez votre gemme d'authentification à une gemme d'autorisation. Pour commencer, je recommanderais cancan car il est très simple et direct.

Si vous utilisez cancan, vous définissez ce que l'utilisateur peut/ne peut pas faire dans models/ability.rb.

class Ability 
    include CanCan::Ability 

    def initialize(user) 
     if user.admin? 
     can :manage, :all 
     else 
     can :read, :all 
     end 
    end 
end 

Alors, selon vous, vous pouvez autoriser les fonctionnalités basées sur le rôle de l'utilisateur:

<% if can? :update, @article %> 
    <%= link_to "Edit", edit_article_path(@article) %> 
<% end %> 

Si vous recherchez plus de puissance, vous voudrez peut-être envisager d'autres petit bijou d'autorisation, telles que declarative_authorization.

0

Il n'est pas nécessaire de vérifier l'autorisation pour les actions qui autorisent tous les utilisateurs.

Si vous avez une autorisation par défaut dans votre ApplicationController, tels que:

before_filter :authorize

Ensuite, soit enlever que tout, et ajoutez le dans uniquement pour les actions qui requièrent une autorisation ou, dans chaque contrôleur vous pouvez le désactiver avec:

skip_before_filter :authorize, :only => [:action_method_name]

vous devriez avoir une méthode simple dans votre ApplicationController où vous pouvez passer dans un rôle et d'obtenir un vrai si l'utilisateur actuel est autorisé:

def authorized? role 
    return true if current_user.roles.collect{|r| r.name.to_sym}.include(role.to_sym) 
    false 
end 

Ensuite, vous pouvez vérifier la procédure pour le rôle que vous voulez dans vos actions.

+0

J'aimerais aussi que certaines pages affichent des vues différentes si l'utilisateur est connecté ou pas connecté. Des conseils à ce sujet? –

Questions connexes