这篇文章 - http://www.ruby-forum.com/topic/51782-似乎提出了一种方法,即在控制器的before_filter中设置User.current_user,并在受该操作影响的模型中访问User.current_user.这是完全线程安全还是存在安全问题?似乎正确的方法是始终将@current_user传递给任何需要它的模型,但这会变得混乱.
该解决方案不是线程安全的,当处理两个请求(A和B)时,后一个请求将更改前一个用户的中间请求(这几乎不可能调试并且对用户极其困惑).
将用户(或用户标识)存储在当前线程的存储中.
class User < ActiveRecord::Base
class << self
def current_user
Thread.current[:current_user]
end
def current_user=(user)
Thread.current[:current_user] = user
end
end
end
before_filter :set_current_user
private
def set_current_user
User.current_user = User.find(session[:user_id])
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |