2011-07-26 87 views
4

我使用的設計首次使用Rails,和我有麻煩的一件事: 我曾經在我的用戶的控制器所提供的authenticate_user!方法來限制像這樣訪問網頁: before_filter :authenticate_user!, :only => [:edit, :show, :update, :create, :destroy]Rails&Devise:如何驗證特定用戶?

但這允許任何登錄用戶訪問任何其他用戶:edit行動,我只想限制爲該用戶。我會怎麼做?

回答

5

在你的編輯方法,你需要做的檢查,以查看用戶是否擁有記錄:

def edit 
    @record = Record.find(params[:id]) 
    if @record.user == current_user 
     @record.update_attributes(params[:record]) 
    else 
     redirect_to root_path 
    end 
end 
+0

嗨,我只是試了一下。我得到以下錯誤: '未初始化的常量UsersController :: Record' 另外我發現真正令人驚訝的是,像這樣完善的身份驗證方法沒有直接支持這樣的事情。 –

+0

只是爲了澄清,這是我做的: '私人 高清verify_ownership @record = Record.find(PARAMS [:編號]) 如果@ record.user == CURRENT_USER 還真 否則 返回false 結束' 然後我在我的控制器頂部使用'before_filter' –

+0

用你的實際型號名稱替換'Record'。我還假設你的模型有一個'user_id'列。您可以使用CanCan或聲明式身份驗證。或者只是使用if-then-else語句來確保適當的權限。設計處理認證,而不是角色。 – Dex

3

你應該看看授權,如CanCan。或可替換地創建一個新的方法,像這樣:

# Create an admin boolean column for your user table. 

def authenticate_admin! 
    authenticate_user! and current_user.admin? 
end 
+0

我想你是誤會我的問題。我不需要管理員用戶可以編輯任何用戶的記錄。我只需要限制用戶只能修改他們自己的記錄。 –

+0

他的確誤解了一點,但你仍應該考慮使用CanCan。您正在尋找授權,CanCan可以做到這一點。 – pcg79

相關問題