2010-05-30 1 views
0

Эй, ребята, у меня есть рубин на рельсах с настройкой до фильтра в моем контроллере приложений, чтобы только владелец мог редактировать документ, но проверка моего разрешения всегда терпит неудачу, даже если он не должен , Вот код:перед тем, как фильтр не работает должным образом

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. Что происходит неправильно?

+0

Просто любопытно ... вы используете authlogic для аутентификации? – DJTripleThreat

+0

Кроме того, если session [: user_id] равен '3', а params [: user_id] равно '3', и они не равны, возможно, вы должны .to_s их первыми? Я только говорю это, потому что у меня есть эта проблема, когда у меня есть два объекта DateTime, которые, когда вы .to_s их равны, но по какой-то причине не оцениваете равным, потому что каким-то образом они представляют собой долю секунды. – DJTripleThreat

+0

Я попробую это DJTripleThreat ... Также я не использую какие-либо драгоценные камни для аутентификации вообще – Jimmy

ответ

2

Если session[:user_id] является «3», а params[:user_id] - «3», они не равны, может быть, вы должны .to_i их первым?

Я говорю только об этом, потому что у меня есть эта проблема, когда у меня есть два объекта DateTime, которые, когда вы .to_s их равны, но по какой-то причине не оцениваете равным, потому что каким-то образом они представляют собой долю секунды.

Ruby - это потрясающий язык, но один откат - это слабо типизированные черты .. ну его обоюдоострый меч, потому что слабо типизированные черты позволяют некоторым классным вещам.

Рад, что помогло!

+0

Я бы сказал, что было бы лучше преобразовать в целое число, а не в строку. – alternative

+0

@ ~ mthepic, я согласен ... Я привык работать с сильно типизированными языками, поэтому преобразование в строку обычно проще. Не так в Ruby. Я отредактирую свой пост. – DJTripleThreat

Смежные вопросы