ste*_*eve 18 rest ruby-on-rails
我为用户提供了典型的RESTful路由:
/user/:id
/user/:id/edit
/user/:id/newsfeed
Run Code Online (Sandbox Code Playgroud)
但是,/user/:id/edit只有当id等于current_user的id时才能访问该路由.因为我只希望current_user有权编辑其配置文件.我不希望其他用户能够编辑不属于他们的配置文件.
什么是处理这种情况的最佳做法?
我应该按原样离开路由,并且如果current_user.id != param[:id]强制前端客户端调用api跟踪登录用户的id,则会出错?
我应该制作一条特殊路线/user/self/edit并在控制器中检查是否param[:id] == 'self'?
evg*_*hev 13
我会为当前用户配置文件操作添加特殊路由,在这种情况下,您不必检查任何内容.只需加载并显示当前用户的数据.例如:
/my-profile/edit
/my-profile/newsfeed
Run Code Online (Sandbox Code Playgroud)
这不是RESTful,但您不必进行额外的检查以保持代码清洁.
如果您仍然必须拥有(或想拥有)严格的RESTful路由,那么我将使用before_filter并检查id = current_user.id.如果没有,则返回401或403.
我只希望current_user有权编辑其个人资料.我不希望其他用户能够编辑不属于他们的配置文件.
我建议使用像权威这样的授权宝石
示例代码:
class UserPolicy
attr_reader :current_user, :model
def initialize(current_user, model)
@current_user = current_user
@user = model
end
def edit?
@current_user == @user
end
end
Run Code Online (Sandbox Code Playgroud)
此外,对于像Devise这样的身份验证gem,只有(登录的用户)才能访问和编辑他们的配置文件current_user