我有一个用户:
GET /user/1 -> {id:1,name:"john"}
我的授权引擎确保任何人都可以GET /user/1
,但PUT /user/1
或PATCH /user/1
仅限于约翰本人或系统管理员。
如何处理只能由管理员修改的用户部分?例如,如果我有一个属性blocked
,它决定是否允许用户登录?出于显而易见的原因,john 应该无法更改他的阻止状态,只有管理员才能更改。
我看到两种方法可以做到这一点:
- 使权限成为一个完全独立的资源,可以在
/permissions/:user
或访问/user/:user/permissions
,并且只允许管理员访问该路径。因此PUT
,PATCH
为了/user/:user
可以随心所欲地更改用户,它实际上只修改用户可修改的数据,而/permissions
管理员可修改的数据 - 将权限内置到用户对象中,但在
PUT
orPATCH
处理程序中执行逻辑以防止管理员以外的任何人修改它。
选项 2 保持用户对象不变,而选项 1 允许我完全封装和分离用户或管理员可以更改的数据和只有管理员可以更改的数据。