管理员和非管理员帐户的宁静api设计

时间:2014-12-26 07:48:27

标签: rest

面临如何为管理员和非管理员帐户设计api的问题。我遵循MVC模式,控制器将映射到uri。

化妆场景:
假设我有一个系统,允许用户在花钱购买商品和收集积分后兑换礼物。

我的系统有一个用户个人资料,礼品和兑换表。 每个用户可以兑换许多礼物,并且每个礼物可以由许多用户兑换。 (兑换是联结表)。

要访问用户个人资料,uri将是这样的:
GET / user / 0001

兑换礼物
POST / user / 0001 / redeem {"金额":1,"地址":"旧地址"}

到目前为止,一切看起来都很整洁。现在,当赎回需要得到管理员用户的批准时,就会出现问题

所以将兑换更新为已批准的状态
PUT / user / 0001 / redeem / 100 {" status":"批准"}

用户可以更新礼品的送货地址 PUT / user / 0001 / redeem / 100 {"地址":"新地址"}

现在我面临以下问题:
1)如果2个路径指向uri,则控制器将在同一个函数中有2个不同的处理代码.1如果是admin的块,则为用户的块为1。

如果我在uri前面添加管理员(admin / user / 0001 / redeem / 100)。 2个不同的路径将识别相同的资源。

2)识别用户身份是在Authorization标题上完成的(Authorization =" USERNAME:SECURITY_HASH")。这是一种典型的宁静方式吗?

3)我无法区分用户角色,因为admin和user存储在不同的表中。因此,如果uri指示用户角色,这将使事情变得更容易。我不想总是在用户之前查询admin表。

1 个答案:

答案 0 :(得分:0)

我会做以下事情:

1)具有POST / admin / user / 1000 / redeem / approve

等URL

理由:

  • 我不想公开有关用户记录中哪个字段必须更改为批准凭证的知识

  • 我更倾向于将所有管理操作与正常用户操作分开

2)其中一个"通常"方法是在成功登录后发布(定期更新的)会话cookie(与用户名或密码哈希无关),然后单独建立一个将该cookie与用户名相关联的机制,并检查该用户名是否允许给定的操作。

理由:减少暴露用户信息的危险。 (如果攻击者窃取cookie,这种方法可能仍然容易受到攻击,但另一种方法也是如此)。

3)如果我们谈论安全性,你将管理员和用户数据存储在不同的表中并不是借口:)使用上面描述的cookie机制可能对此有所帮助,但是你仍然需要建立验证给定用户可以调用给定方法。

相关问题