我在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,但您应该有足够的参数来根据您的需要进行自定义.