1

我正在设计一个 Web API,它还处于最基本的阶段。

我系统中的每个用户都可以拥有一个或多个角色。(示例用户和管理员)。

API 本身被设计为模块和方法,例如我有一个模块用户,在它下面有以下方法

用户

  • get_friends_of
  • get_profile_pic_url

现在,在我的用户角色管理代码中,这些方法中的每一个都是“权利”。这些权限被分配给一个或多个角色,例如两个角色看起来像

user_role = ['get_profile_pic_url'] 管理员角色 = ['get_profile_pic_url','get_friends_of']

因此,每当用户尝试调用一种方法时,我都会查看他的任何角色是否将此方法作为权利提及。如果是,则调用它,否则它不是。

除了以下情况外,这就像黄油一样工作。

用户 X 通常无权调用“get_friends_of”,但我希望允许他在尝试获取自己的朋友时调用该方法。

例如 get_friends_of(X) 是允许的,但 get_friends_of(y) 将被拒绝。

我的问题是如何将这些案例融入我的设计中?

一个直接的解决方案可能是我引入“get_my_friends”方法,但它会增加我的 API 的大小,我必须编写更多文档并查看它实际上只是“get_friends_of”的一个特例。从某种意义上说,它也是不可扩展的,我可能想让用户看到朋友的朋友。

我的 API 中的设计目标之一是调用你的每个方法都是互斥的。

4

2 回答 2

1

您的授权工作方式...您拥有-用户->角色-角色->权限(功能名称)

如果你实现你正在尝试做的事情......你会做到: - 角色 - >权利(函数名称+特定参数值)。

这感觉不对。您可以根据函数名称和参数值拥有权限,但是您的整个授权逻辑将有太多逻辑......维护起来会非常复杂。

我建议你照你说的做......创建一个新函数 get_my_friends()

于 2012-05-29T09:08:04.300 回答
0

在我看来,您的User模块正在以两种不同的方式使用 - 表示单个User实体(get_my_friendsget_profile_pic_url案例)并提供与用户相关的一般访问权限(get_friends_of案例)。您可能需要考虑将它们分开,可能分为 aUser和 a UserRepository,其中前者代表一个User有朋友和个人资料图片 URL 的现实世界,后者提供对Users 的通用访问。

以下是一些链接,详细说明了您遇到的概念:

于 2012-05-28T19:44:31.820 回答