Web API C# - 基于角色的访问

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

我有一个网络应用,有三个不同的用户角色,分别是管理员、经销商和卖家。每个卖家都连接到一个经销商。

假设我们想显示一个卖家列表,当经销商向API提出请求时。GET: apiv1memberssellers(卖家)

预期的结果是所有的卖家都连接到该经销商。控制器可以看起来像这样。

[HttpGet]
[MemberAuthorize(AllowGroup = "Admin,Reseller")]
[Route("sellers")]
public HttpResponseMessage GetSellers()
{
    var member = _memberHelper.GetCurrentMember();
    if (member.Role == "Reseller")
        return sellersByReseller;
    if (member.Role == "Admin")
        return getAllSellers;

    ...
}

这将是可行的,但在我看来,它看起来并不漂亮,而且很难测试。

是否有其他的C# Web API方法可以用于此?类似于这样的东西将是非常整洁的。

[HttpGet]
[MemberAuthorize(AllowGroup = "Reseller")]
[Route("sellers")]
public HttpResponseMessage GetSellers()
{
    getSellersByReseller;
}

[HttpGet]
[MemberAuthorize(AllowGroup = "Admin")]
[RoutePrefix("sellers")]
public HttpResponseMessage GetSellersAsAdmin()
{
    getAllSellers;
}
c# asp.net-mvc asp.net-web-api roles
1个回答
0
投票

我觉得你不可能这样拆分,主要是因为基于角色的认证并不是相互排斥的。也就是说,应该没有什么可以阻止一个用户同时拥有 "Admin "角色和 "Reseller "角色。在这种情况下,路由将如何表现?即哪个控制器动作应该被调用?


我建议你把它分成两个独立的路由,就像你已经建议的那样。

[HttpGet]
[MemberAuthorize(AllowGroup = "Reseller")]
[Route("reseller/sellers")]
public HttpResponseMessage GetSellersByReseller()
{
    return getSellersByReseller;
}

[HttpGet]
[MemberAuthorize(AllowGroup = "Admin")]
[RoutePrefix("admin/sellers")]
public HttpResponseMessage GetAllSellers()
{
    return getAllSellers;
}

路径的命名是否合理由你决定 最重要的是,我建议避免让一个路由返回不同的结果。是的,它们都会返回一个卖家列表,但前提是不同的,而不仅仅是由例如搜索词来定义的,这对于一条路线来说是可以接受的。现在,这两条路线显然是为了两个不同的东西audiences。

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