我正在设计一个 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 中的设计目标之一是调用你的每个方法都是互斥的。