我使用的設計首次使用Rails,和我有麻煩的一件事: 我曾經在我的用戶的控制器所提供的authenticate_user!
方法來限制像這樣訪問網頁: before_filter :authenticate_user!, :only => [:edit, :show, :update, :create, :destroy]
Rails&Devise:如何驗證特定用戶?
但這允許任何登錄用戶訪問任何其他用戶:edit
行動,我只想限制爲該用戶。我會怎麼做?
我使用的設計首次使用Rails,和我有麻煩的一件事: 我曾經在我的用戶的控制器所提供的authenticate_user!
方法來限制像這樣訪問網頁: before_filter :authenticate_user!, :only => [:edit, :show, :update, :create, :destroy]
Rails&Devise:如何驗證特定用戶?
但這允許任何登錄用戶訪問任何其他用戶:edit
行動,我只想限制爲該用戶。我會怎麼做?
在你的編輯方法,你需要做的檢查,以查看用戶是否擁有記錄:
def edit
@record = Record.find(params[:id])
if @record.user == current_user
@record.update_attributes(params[:record])
else
redirect_to root_path
end
end
你應該看看授權,如CanCan。或可替換地創建一個新的方法,像這樣:
# Create an admin boolean column for your user table.
def authenticate_admin!
authenticate_user! and current_user.admin?
end
我想你是誤會我的問題。我不需要管理員用戶可以編輯任何用戶的記錄。我只需要限制用戶只能修改他們自己的記錄。 –
他的確誤解了一點,但你仍應該考慮使用CanCan。您正在尋找授權,CanCan可以做到這一點。 – pcg79
嗨,我只是試了一下。我得到以下錯誤: '未初始化的常量UsersController :: Record' 另外我發現真正令人驚訝的是,像這樣完善的身份驗證方法沒有直接支持這樣的事情。 –
只是爲了澄清,這是我做的: '私人 高清verify_ownership @record = Record.find(PARAMS [:編號]) 如果@ record.user == CURRENT_USER 還真 否則 返回false 結束' 然後我在我的控制器頂部使用'before_filter' –
用你的實際型號名稱替換'Record'。我還假設你的模型有一個'user_id'列。您可以使用CanCan或聲明式身份驗證。或者只是使用if-then-else語句來確保適當的權限。設計處理認證,而不是角色。 – Dex