RESTful API 对于同一实体,如何定义管理员和用户的路径?

2018-08-23 22:55:28 +08:00
 kuretru

API 同时为用户及后台管理员提供接口,2 种用户都需要访问某一资源,如何优雅的定义路径,区分 2 种权限?管理员调用时字段肯定比用户调用时较多。
例如GET /api/items获取所有物品列表,管理员可以额外获取到库存字段。

8205 次点击
所在节点    程序员
41 条回复
ksharp8
2018-08-23 22:58:36 +08:00
管理员 api 继承用户 api,路径加 /ad
hlwjia
2018-08-23 23:16:58 +08:00
我大多数项目的大多数接口用的是相同的 endpoints,只是在返回的时候根据用户身份来返回对应的内容。
zjp
2018-08-23 23:24:52 +08:00
@ksharp8 如果这样设计,不是又要考虑用户访问 /api/items/ad 和 管理员访问 /api/items/ 应该返回的字段吗
ksharp8
2018-08-23 23:32:49 +08:00
@kuretru 因为是继承的,所以两套功能基本一致,然后在管理员 api 里面再加点内容,返回的内容都进行加密,可以用 discuz 的加解密函数,改改参数
hugoqin
2018-08-23 23:37:43 +08:00
额外的参数放在 header 里
feiyuanqiu
2018-08-23 23:38:12 +08:00
一般情况管理员和用户不会调用同一个接口,管理员在 boss 后台,用户在前台,这是两个系统,资源定义和接口路径都不一样
lscho
2018-08-23 23:39:34 +08:00
这不应该是后台处理的吗?路径保持一致,不同身份返回的数据不一样
mec
2018-08-23 23:44:05 +08:00
路径一致啊
hsluoyz
2018-08-23 23:50:19 +08:00
路径一样的情况下,可以通过用户的角色不同来区分权限,比如普通用户是 user 角色,管理员用户是 admin 角色,user 角色对路径只能 GET 操作,admin 角色则可以实现 POST、DELETE 等修改操作。具体实现可以使用 Casbin 权限管理库: https://github.com/casbin/casbin, 支持 Go、Java、Node.js 多种语言
StevenTong
2018-08-23 23:54:46 +08:00
我倒是觉得比较麻烦就是了。

不过在微服务里 都会写两个 api 服务吧
ericgui
2018-08-24 03:21:42 +08:00
同一实体就同样的 url 或 endpoint

你内部要根据身份来确定返回什么内容
IvanLi127
2018-08-24 07:46:06 +08:00
路径不作区分,后端自行根据用户凭据判断
kuretru
2018-08-24 07:49:28 +08:00
@ksharp8 @hlwjia @hugoqin @ericgui @IvanLi127 感谢各位的回复
zhzer
2018-08-24 08:24:49 +08:00
符合 restful 的还是放到 header 里,直接根据 token 判断权限
learnshare
2018-08-24 08:54:54 +08:00
路径上没有区别,根据用户身份判断返回什么
pipixia
2018-08-24 08:57:24 +08:00
都是人为什么加以区分?
micean
2018-08-24 08:57:49 +08:00
我会定义 2 种路径,权限控制上舒服很多
bk201
2018-08-24 09:05:17 +08:00
权限不是应该后台鉴定,和前端 url 设计有什么关系?
imlewc
2018-08-24 09:16:14 +08:00
2 个路由
代码尽可能复用
DavidNineRoc
2018-08-24 09:37:27 +08:00
首先先说明管理员和用户的区别。 如果后台也是前后台分离。 我建议直接分 url。因为这两种数据需要的根本不一样。
如果只是单纯想实现这个功能。一般就只能加判断权限了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/482682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX