在过滤器未按预期工作之前

时间:2010-05-30 02:14:14

标签: ruby-on-rails permissions before-filter

嘿伙计们,我在应用程序控制器中使用过滤器安装程序在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 个答案:

答案 0 :(得分:2)

如果session[:user_id]为'3'并且params[:user_id]为'3'并且它们不相等,那么您应该首先.to_i它们?

我只说这个,因为我有这个问题,我有两个DateTime对象,当你.to_s它们相等但由于某种原因不能评估为相等,因为不知何故它们只是一秒的不同。< / p>

Ruby是一种非常棒的语言,但其中一个缺点是弱类型的功能..它是一把双刃剑,因为弱类型的功能允许一些很酷的东西。

很高兴有帮助!