(这适用于单页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
。是否有可能实现这一目标,还是有更好的方法?
答案 0 :(得分:1)
与在具有复杂约束的路由层中处理此问题相反,为什么不简单地提供某种只将current_user作为json返回的UsersController#current
端点?
class UsersController
# ...
def current # or def show
render json: current_user
end
# ...
end
最好只是让某种端点需要身份验证并呈现经过身份验证的用户,而不是根据身份验证动态路由。