до фильтра не работает, как ожидалось - PullRequest
0 голосов
/ 30 мая 2010

Привет, ребята. У меня есть приложение ruby ​​on rails с настройкой фильтра «до» в контроллере приложения, чтобы гарантировать, что только владелец может редактировать документ, но моя проверка разрешений всегда терпит неудачу, даже если это не так. Вот код:

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. Что идет не так?

1 Ответ

2 голосов
/ 30 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...