2011-05-19 119 views
0

我正在使用Devise進行身份驗證,並且我只需要一個簡單的管理員或使用幾個控制器的檢查。我是新來的鐵軌,所以我試圖以正確的方式做到這一點。我基本上都添加了一個布爾管理領域的用戶模型,並將此方法關於簡單授權的問題

def is_admin? 
    admin == 1 
    end 

然後,我只是修改了控制器動作這個

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 

所以這個解決方案的工作,但我應該做的這是一種不同的方式?

回答

2

這將工作,但我可能不會推薦這個解決方案的其他比小規模項目。隨着時間的推移,如果您在控制器中執行授權檢查,您的代碼將變得臃腫且難以管理。

相反,我會考慮使用授權模塊,如Cancan,它將授權規則集中在一個地方,從而將應用程序邏輯從授權邏輯中分離出來。最終的結果是更清潔和更可維護的代碼。

隨着慘慘的地方,你的代碼可能是這樣的:

# 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