2010-07-13 33 views

回答

0

我使用AuthLogic,但據我所知「current_user」不會通過路由訪問。

您需要檢查,在控制器中,如果PARAMS [:ID] == 「CURRENT_USER」(作爲一個字符串),然後以此爲基礎進行一些邏輯...即:

if params[:id] == "current_user" 
    @user_id = current_user.id 
else 
    @user_id = params[:id] 
end 
@user = User.find(@user_id) 

一個非常簡單的例子,但它應該說明你將需要從自定義路由中獲取current_user的邏輯類型。您也可以將current_user的命名路由映射到它自己的控制器操作,但這不是很RESTful,並且很可能會重複您已擁有的功能。

3

聲明授權似乎 要求PARAMS [:ID]來完成其 驗證

如果你是依靠filter_resource_access設置實例變量在控制器這是唯一真正的。您可以通過指定filter_access_to來設置您自己的授權方案。這使您可以設置您自己的自定義方法,可以基於您喜歡的任何方式 - 會話變量,模型屬性等。

introduction中的控制器部分說明了filter_access_to並給出了一些示例。

+0

具體來說,使用before_filter將User對象分配給'@ user'。然後'@ user'將被用在授權檢查中。 – 2011-10-03 20:21:50

1

如果您的應用程序中有用戶,爲什麼不使用身份驗證插件?我使用了Restful身份驗證,並通過一些工作完成了會話管理。對於你的問題,這個插件有一個幫助器方法current_user,用於檢索打開的會話用戶。

我認爲它更好地依靠像寧靜的身份驗證(或AuthLogic如響應#1)插件比實現您的解決方案,但你會更清楚你的需求;)

0

使用devise這樣你可以得到一個current_user方法。

使用filter_access_to而不是filter_resource_access

+0

我曾使用filter_access_to:所有問題都是一樣的。其他解決方案。 – kriysna 2010-07-16 09:43:44