我正在设计一个Web API,它处于最基本的阶段。
我系统中的每个用户都可以拥有一个或多个角色。 (示例用户和管理员)。
API本身被设计为模块和方法,例如我有一个模块User,其下面有以下方法
用户
现在,在我的用户角色管理代码中,每个方法都是“正确的”。这些权限分配给一个或多个角色,例如两个角色看起来像
user_role = ['get_profile_pic_url'] administrator_role = ['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中的一个设计目标是每个方法调用您是互斥的。
答案 0 :(得分:1)
你的授权方式......你有 - 用户 - >角色 - 角色 - >权利(职能名称)
如果你实施了你想做的事情......你会做到的: - 角色 - >权限(功能名称+特定参数值)。
这感觉不对。您可以拥有基于函数名和参数值的权限,但是您的整个授权逻辑将具有太多逻辑......维护将变得非常复杂。
我建议你做你说的....创建一个新函数get_my_friends()
答案 1 :(得分:0)
在我看来,您的User
模块以两种不同的方式使用 - 代表单个User
实体(get_my_friends
和get_profile_pic_url
个案例)并提供一般用户相关的访问(get_friends_of
案例)。您可能需要考虑将这些分隔为User
和UserRepository
,其中前者代表拥有朋友和个人资料图片网址的真实世界User
,后者提供通用访问User
s。
以下是一些链接,解释了您遇到的概念的更多信息: