2012-01-05 83 views
3

在Rails3應用程序中,我有一些與user_id模型 - 這種方式我說:它是由一些用戶創建的。通過ID檢查用戶權限的最佳方法是什麼?

像:

current_user.id #=> 1 
@item.user_id #=> 1 
# this item created by user with id 1 

,我想CURRENT_USER的接取限制這不是由他創建的/她的物品。

喜歡的東西:

if @item.user_id == current_user.id 
    #everything is fine 
else 
    #redirect somwhere with flash "You don't have an access here" 
end 

什麼是最好的辦法,因爲我有這樣的USER_ID的車型倍數(和控制器來顯示/編輯/銷燬)?

回答

4

使用CanCan

有了它,你將能夠以聲明的方式定義權限,就像這樣:

can :read, Project, :user_id => user.id 

後來執行這個規則:

def show 
    @project = Project.find(params[:id]) 
    authorize! :read, @project 
end 

authorize!將引發異常,但你可以在檢查更和平的方式:

<%= link_to 'Link to a project', @project if can? :read, @project %> 

你可以攔截授權錯誤並在一個地方處理它們:

class ApplicationController < ActionController::Base 
    rescue_from CanCan::AccessDenied do |exception| 
    redirect_to root_url, :alert => exception.message 
    end 
end 
0

最簡單的方法是使用Active Record的has_many

也就是說,在一個控制器,只要您加載Item,你剛纔說

@item = current_user.items.find(params[:id]) 

這樣你就不必做任何工作進行檢查。

相關問題