请求权限映射
根据RESTful的相关风格规范, 我们将请求映射为以下几种操作
GET /users/ -----> `list.users`
GET /users/:id/ -----> `retrieve.users`
POST /users/ -----> `create.users`
PUT /users/:id/password/ -----> `replace.users`
PATCH /users/:id/ -----> `update.users`
DELETE /users/:id/ -----> `destroy.users`
权限控制器映射
如果后端以MVC模式进行开发, 那么我们可以映射如下控制器
`list.users` -----> list(users)
`retrieve.users` -----> retrieve(user,id)
`create.users` -----> create(users)
`replace.users` -----> replace(users,id,field)
`update.users` -----> update(users,id)
`destroy.users` -----> destroy(users,id)
鉴权流程
权限的管理采用传统的RBAC模式
身份验证,返回具体user或者anonymous,接下来我们把这一步返回的user都作为正常user
验证请求权限,即上述验证请求权限映射
验证资源存在性与所属权, 这里存在争议.
如果放到控制器之前, 那么可能会出现格外数据库查询,同时会增加代码上的复杂性, 但是可以把所有鉴权过程放到一起.
如果放到控制器中,鉴权过程分开了,由于不同的资源可能有不同的所属权判断标准,这样可以增加灵活性.
讨论点
资源存在性与所属权放到控制器里还是作为中间件放到控制器之前?
请求权限映射有哪些需要改进的地方?
能否将整个认证鉴权流程规范化?