如何在你的web api中正确地实现访问级别的分离



当前我在控制器中收到索赔,这些索赔包含administratorteamid。在我的存储库中,每次我想检索数据列表的调用,您都可以获得团队可用的数据,或者如果您是管理员,则可以获得所有数据。要检查的代码是这样的:

var content = _dataContext.Content
.Where(c => c.teamId == teamId || isAdministrator)
.Where(x => rest of the query here)

这是实施此类访问限制的好方法吗?或者有更好的方法来实现这一点吗?

这是实现此类访问限制的好方法吗?或者有更好的方法来实现这一点吗?

您可以使用基于角色的授权或基于声明的授权以更好的方式实现这种访问控制,这些都是更优雅的方式。您可以在这里查看我们的官方文件的实施细节

这不会导致查询的高度重复吗?那我就得有两个功能。一个用于基于团队的查询,另一个用于管理查询。或者这实际上是更好的方式?

不,这真的不是"重复查询";这是处理这种需求的优雅方式,也是处理这种需求最常用的方式。因为在你现有的代码中,当任何新角色出现时,你每次都必须重写逻辑,这不符合告诉我们";对象或实体应该是开放的以进行扩展,但关闭以进行修改";。

最新更新