Пользовательские маршруты и декларативная авторизация

StackOverflow https://stackoverflow.com/questions/2981350

Вопрос

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

Имейте собственные маршруты для пользователей.Если я обращаюсь к пользователю напрямую /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 }

Мой контроллер приложений имеет

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top