Эй, ребята, у меня есть рубин на рельсах с настройкой до фильтра в моем контроллере приложений, чтобы только владелец мог редактировать документ, но проверка моего разрешения всегда терпит неудачу, даже если он не должен , Вот код:перед тем, как фильтр не работает должным образом
def get_logged_in_user
id = session[:user_id]
unless id.nil?
@current_user = User.find(id)
end
end
def require_login
get_logged_in_user
if @current_user.nil?
session[:original_uri] = request.request_uri
flash[:notice] = "You must login first."
redirect_to login
end
end
def check_current_user_permission
require_login
logger.debug "user id is #{params[:user_id]}"
logger.debug "current user id is #{session[:user_id]}"
if session[:user_id] != params[:user_id]
flash[:notice] = "You don't have permission to do that."
redirect_to :controller => 'home'
end
end
Код, указанный в файле check_current_user_permission. Вот пример моего журнала:
user id is 3
current user id is 3
Redirected to http://localhost:3000/home
Filter chain halted as [:check_current_user_permission] rendered_or_redirected.
Может ли кто-нибудь пролить свет на то, почему это не удается? Очевидно, user_id из 3 равно user_id сеанса из 3. Что происходит неправильно?
Просто любопытно ... вы используете authlogic для аутентификации? – DJTripleThreat
Кроме того, если session [: user_id] равен '3', а params [: user_id] равно '3', и они не равны, возможно, вы должны .to_s их первыми? Я только говорю это, потому что у меня есть эта проблема, когда у меня есть два объекта DateTime, которые, когда вы .to_s их равны, но по какой-то причине не оцениваете равным, потому что каким-то образом они представляют собой долю секунды. – DJTripleThreat
Я попробую это DJTripleThreat ... Также я не использую какие-либо драгоценные камни для аутентификации вообще – Jimmy