如何在 Web api 中正确实现访问级别分离?

问题描述 投票:0回答:1

目前我在控制器中收到声明,这些声明包含

administrator
teamid
。在我的存储库中,每次调用我想要检索数据列表时,您要么获取可供团队使用的数据,要么获取所有数据(如果您是管理员)。检查的代码如下所示:

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

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

c# entity-framework asp.net-core
1个回答
0
投票

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

您可以使用基于角色的授权基于声明的授权以更好的方式实现这种访问控制,这些是更优雅的方式。您可以在我们的官方文档

查看详细实施信息

这不会导致大量重复查询吗?那么我必须有两个功能。一种用于基于团队的查询,一种用于基于管理的查询。或者这实际上是更好的方法吗?

不,这确实不是“重复查询”;这是处理这种情况的优雅方法,也是处理此类需求最常用的方法。因为在现有代码中,当任何新角色出现时,每次都必须重新编写逻辑,这不符合 SOLID 原则,该原则告诉我们“对象或实体应该对扩展开放,但对修改关闭” .

© www.soinside.com 2019 - 2024. All rights reserved.