2011-05-19 3 views
0

J'utilise Devise pour l'authentification, et je n'ai besoin que d'un simple contrôle d'admin ou d'utilisation pour quelques contrôleurs. Je suis nouveau sur les rails, donc j'essaie de faire ça de la bonne façon. J'ai essentiellement ajouté un champ admin booléen au modèle d'utilisateur et ajouté cette méthodeQuestion sur l'autorisation simple

def is_admin? 
    admin == 1 
    end 

Je simplement modifié l'action du contrôleur à cette

def new 
    if current_user.nil? || !current_user.is_admin? 
     flash[:notice] = "You do not have permission to view this page" 
     redirect_to "/gyms" 
     else 
     @gym = Gym.new 

     respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @gym } 
     end 
    end 
    end 

donc cette solution fonctionne, mais dois-je faire c'est une manière différente?

Répondre

2

Cela fonctionnera mais je ne recommanderais probablement cette solution pour rien d'autre qu'un projet à petite échelle. Au fil du temps, si vous effectuez des vérifications d'autorisation au sein de vos contrôleurs, votre code va devenir gonflé et difficile à gérer. Au lieu de cela, j'utiliserais un module d'autorisation tel que Cancan qui centralise vos règles d'autorisation en un seul endroit et dissocie ainsi votre logique d'application de votre logique d'autorisation. Le résultat final est un code plus propre et plus maintenable.

Avec Cancan en place, votre code pourrait ressembler à ceci:

# app/controllers/gyms_controller.rb 
class GymsController < ApplicationController 
    load_and_autorize_resource 

    def new 
     respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @gym } 
     end 
    end 
    end 
end 

# app/models/Ability.rb 
can :create, Gym do |trip| 
    user.is_admin? 
end