簡體   English   中英

自定義路由和聲明授權

[英]Custom Routes and Declarative Authorization

不知道以前是否已經回答過這個問題。

有自定義路由到用戶。 如果我直接訪問用戶/ users / 5一切正常。 如果我嘗試/ profile或甚至/ users / current_user與聲明授權我得到“找不到沒有ID的用戶”

map.profile "profile", :controller => "users", :action => "show"
map.edit_profile 'profile/edit', :controller => 'users', :action => 'edit', :conditions => { :method => :get }

我的ApplicationController有

before_filter {| c | Authorization.current_user = c.current_user}

我的authorization_rules有user.id,也嘗試過current_user.id。

role :user do
    includes :guest
    has_permission_on :users, :to => [:show, :edit ] do
    if_attribute :id => is { user.id }
  end
end

我究竟做錯了什么?

對於自定義索引類型路由使用
filter_access_to:全部

而不是
filter_resource_access

也幫我了

我使用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,並且[很可能]會復制您已有的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM