.net 具有角色限制字段的REST API端点

k2arahey  于 2023-01-14  发布在  .NET
关注(0)|答案(1)|浏览(161)

需要你的意见与我的项目,因为我目前被困在一个问题。
我有一个端点API/v1/groups/:id,登录用户可以从该端点获取有关特定组的信息。用户可以获取两种可能的回复:
1.{ ID:“组ID”,名称:“组名”,说明:“组描述”,是否为已批准访问:布尔值}

isAccessApproved-是一个布尔值,指示是否批准用户加入组的访问权限

1.如果用户还没有发送加入组的请求,他将得到一个回复,即没有找到具有此ID的组。
然而,我被要求管理员和超级管理员获得有关特定组的所有信息,即使他们没有发送加入该组的请求。
因此,主要问题是,如果我在API/v1/groups/:id端点上为管理员和超级管理员角色添加角色检查,我将获得方法内部的检查以及可以从此端点返回的两种不同类型的JSON对象:一个的isAccessApproved字段是bool值,另一个JSON对象将不包含这个键,因为发送它是无用的,他们没有发送加入组的请求,他们根本不需要它。这种情况让我很困惑。从我在堆栈上读到的内容来看,以下解决方案是可能的:
1.API/v1/groups/:id将JSON对象返回给管理员和超级管理员,其中包含有关特定组的完整信息,但不包含isAccessApproved。对于发送加入组请求的所有其他用户,api/v1/groups/:id将返回JSON,其中包含isAccessApproved布尔值。
1.创建将由超级管理员和管理员使用的API/v1/admin/groups/:id。仍然不确定管理员和超级管理员是否都可以使用它,因为超级管理员在应用程序中具有更多权限
1.管理员和超级管理员将从API/v1/groups/:id请求组,但是某种中间件将定义是否是管理员/超级管理员请求源,并将请求转发到api/v1/admin/groups/:id(例如)。
1.我不知道。也许是某个单独的端点,比如API/v1/admin/groups/:id/admin????
请指教。

mv1qrgav

mv1qrgav1#

我认为我会选择第二种方法,创建一个指定的端点来处理同一权限级别的请求比在同一个端点上处理不同权限级别的请求要清晰和简单得多,可以在这个指定的端点上添加[Authorize(Roles = "Admin,Super Admin")]属性。此属性将仅允许具有AdminSuper Admin角色的用户访问此终结点。Super Admin在您的应用程序中可能具有更多权限,但在此终结点中,Super AdminAdmin具有获取数据的相同权限。
第三种方法也是一种很好的方法,但是可能需要编写一个中间件来检查用户的角色,然后重写请求路径。

相关问题