Пользовательские маршруты и декларативная авторизация - PullRequest
1 голос
/ 05 июня 2010

Не знаю, был ли ответ на этот вопрос ранее.

Есть пользовательские маршруты для пользователей. Если я обращаюсь к пользователю напрямую / users / 5, все работает. Если я пытаюсь / profile или даже / users / current_user с декларативной авторизацией, я получаю «Не удалось найти пользователя без идентификатора»

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

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

Для пользовательских маршрутов типа индекса используйте
filter_access_to: все

Вместо
filter_resource_access

получил меня тоже.

1 голос
/ 06 июня 2010

Я использую 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 и [скорее всего] дублирует функциональность, которую вы уже имеете.

...