这是场景,我有一个包含许多记录的服务。我的服务还有许多用户,每个用户都能够创建,读取,更新和删除记录。必须在记录级别控制对每条记录执行这些操作的能力。
例如,用户A只能读取和更新记录1,但用户B可以读取,更新和删除记录1,2和3,用户C可以对所有记录执行所有操作。
如果可以,可以使用Azure AD完成此操作吗?
显然,使用应用程序角色是不够的,因为这为用户提供了对所有记录的统一访问权限。
租户也没用,因为它对所有用户都是一样的(在这个例子中)。
我绝对不想单独为每条记录定义访问权限,我想做一些事情,比如将角色分配给用户组,然后以某种方式将记录分配给组。
有没有一种标准的方法来处理这种基于资源的授权?
正如您所正确提到的,基于角色的访问或授权非常通用,使用该角色,具有特定角色的用户可以访问(或被拒绝访问)所有资源。 (如果您的sceanrio允许,您可以通过将资源划分为几种类型并将一种或多种类型的资源访问一个或多个角色来使其更好一些)。
尝试单独控制每个记录的访问时,您需要实现基于资源的授权的自定义逻辑。通常,应用程序使用由其需求驱动的基于角色和基于资源的授权的混合。
最后,它将归结为您需要在三件事之间维护的映射
Blogs.Create
对博客应用程序的许可)Microsoft Docs上提供的相关文档
Role-based and resource-based authorization
本文档讨论了类似的概念,并展示了一个利用基于角色和基于资源的良好示例。基于角色的资源的CRUD操作,然后是该资源所有者的特定资源的特殊权限(即基于资源)
代码示例
为组分配应用程序角色
由于您在问题中提到了这一点,只是让您知道这可以从Azure门户获得,但仅当您拥有Azure AD Premium许可证时(我不确定哪些特定支持它,但搜索基于组的分配功能和你会找到的。)