#ruby-on-rails #session
#ruby-on-rails #сессия
Вопрос:
У меня есть переменная current_user, установленная для вошедшего в систему пользователя, она должна быть статичной на время сеанса, но когда я показываю одного из других пользователей, я, кажется, «становлюсь» этим пользователем со всеми его разрешениями (или их отсутствием)
в моем пользовательском контроллере:
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @user }
end
end
в моем помощнике по сеансам:
def current_user?(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
В моей боковой панели
<%= link_to current_user.username, :controller => 'users', :action => 'show', :id => current_user.id %></br>
Это отражает изменение пользователя (как и новое отсутствие дополнительных ссылок «admin»)
Чего я не понимаю?
Ответ №1:
current_user?
Метод неверен. Он устанавливает current_user
значение user
вместо того, чтобы возвращать, current_user
совпадает ли оно с user
.
Если вы измените его на следующее, все, вероятно, будет работать так, как ожидалось:
def current_user?(user)
@current_user == user
end
Комментарии:
1. Милый Мозес, вы, ребята, все быстрые — и хорошие! Это сделало свое дело! Спасибо, Миша! Вы избавили мой лоб и стол от лишних хлопот….
2. Такую простую ошибку можно совершить. Хорошее обнаружение!
Ответ №2:
Возможно, ваша система аутентификации хранит текущего пользователя в обоих @current_user
и @user
— поэтому в вашем show
действии вы случайно устанавливаете текущего пользователя на пользователя, которого пытаетесь показать.
Попробуйте вместо этого @user_to_show
в своем show
действии и посмотрите, исправит ли это.