如何处理路由中的当前用户

时间:2013-12-30 23:01:37

标签: ruby-on-rails rails-routing

(这适用于单页Javascript应用程序,其中某些用户信息嵌入在布局中)

我希望根据用户的权限约束我的路线,并允许他们通过路线/current查看自己的信息。也就是说,如果他们是user,他们只能访问用户可以访问的路线,虽然他们无法查看其他user信息,但他们可以查看自己的信息。我使用约束来设置它:

scope :users, constraints: UserConstraint.new do
    get '/:id/' => 'users#show'
end

当用户想要使用id访问路线时,此功能正常,但我不想将id嵌入到页面中;我希望用户能够访问/users/current并访问他们的信息。我想做像

这样的事情
scope :users, constraints: ->(req) {
    req.params[:id] = RequestCurrentUser.new(req).user.id if req.params[:id] == 'current'
} do
    get '/:id/' => 'users#show'
end

但是控制器会看到id=current而不是id=1。是否有可能实现这一目标,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

与在具有复杂约束的路由层中处理此问题相反,为什么不简单地提供某种只将current_user作为json返回的UsersController#current端点?

class UsersController
  # ...

  def current # or def show
    render json: current_user
  end

  # ...
end

最好只是让某种端点需要身份验证并呈现经过身份验证的用户,而不是根据身份验证动态路由。