c# – 基于路由参数的基于ASP.NET Web API角色的授权

我在ASP.NET Web API 2项目中使用角色来限制对某些资源的访问.

现在我有以下场景:
俱乐部经理只能对他管理的俱乐部进行GET.俱乐部管理员不应被授权进入他未管理的俱乐部.

这是获得俱乐部的方法:

[Authorize(Roles = "ClubManager")]
[Route("{clubId}")]
public Club GetClub(int clubId)

如您所见,我只允许具有“ClubManager”角色的用户访问此资源.但我还必须确保用户是俱乐部的经理,并且路线参数中包含给定的clubId.
我可以使用Authorize属性实现此目的吗?或者我唯一的选择是在方法本身内进行此检查?

解决方法:

您可以使用自定义AuthorizeAttribute执行此操作,例如:

public class ClubAuthoriseAttribute : System.Web.Http.AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        int clubId;
        int.TryParse((string) actionContext.ActionArguments["clubId"], out clubId);

        if (!UserCanManageClub(clubId))
        {
            return false;
        }

        return base.IsAuthorized(actionContext);
    }
}

然后使用这个新属性:

[ClubAuthorise(Roles = "ClubManager")]
[Route("{clubId}")]
public Club GetClub(int clubId)

请注意,这是假设参数名为clubId,但您应该有足够的参数来根据您的需要进行自定义.

上一篇:【无标题】


下一篇:java 深入技术六(Map)