获取 AuthorizeAttribute 以在 web api 2 应用程序中使用开始日期和到期日期的角色?
Get AuthorizeAttribute to work roles with start and expiration date in web api 2 application ?
我需要使用 Identity 2 修改我的 web api 2 项目中的用户角色,方法是添加其他属性:DateTime StartDate
和 DateTime EndDate
。这是能够在有限的时间内授予用户角色所必需的。
我需要做什么才能获得 Authorize
属性(例如 [Authorize(Role="poweruser")]
等)以了解角色日期?
根据来源 (https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/AuthorizeAttribute.cs),此过滤器最终调用 IPrincipal.IsInRole
:
protected virtual bool IsAuthorized(HttpActionContext actionContext)
{
...
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
{
return false;
}
return true;
}
看来我需要在 HttpActionContext.ControllerContext.RequestContext.Principal
中对 IPrincipal
的实现进行子类化,并以某种方式将其注入生命周期中的某处而不是默认实现。
我该怎么做?
只需创建 AuthorizeAttribute
的自定义实现,例如 UserAuthorize
,而不是使用 [Authorize(Role="poweruser")]
,您将使用 [UserAuthorize(Role="poweruser")]
。
您的 UserAuthorize
实现可能如下所示:
public class UserAuthorizeAttribute : AuthorizeAttribute
{
/// <summary>
/// Validate User Request for selected Feature
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if(!isAuthorized) {
return false; //User is Not Even Logged In
}
//Your custom logic here
}
我需要使用 Identity 2 修改我的 web api 2 项目中的用户角色,方法是添加其他属性:DateTime StartDate
和 DateTime EndDate
。这是能够在有限的时间内授予用户角色所必需的。
我需要做什么才能获得 Authorize
属性(例如 [Authorize(Role="poweruser")]
等)以了解角色日期?
根据来源 (https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/AuthorizeAttribute.cs),此过滤器最终调用 IPrincipal.IsInRole
:
protected virtual bool IsAuthorized(HttpActionContext actionContext)
{
...
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
{
return false;
}
return true;
}
看来我需要在 HttpActionContext.ControllerContext.RequestContext.Principal
中对 IPrincipal
的实现进行子类化,并以某种方式将其注入生命周期中的某处而不是默认实现。
我该怎么做?
只需创建 AuthorizeAttribute
的自定义实现,例如 UserAuthorize
,而不是使用 [Authorize(Role="poweruser")]
,您将使用 [UserAuthorize(Role="poweruser")]
。
您的 UserAuthorize
实现可能如下所示:
public class UserAuthorizeAttribute : AuthorizeAttribute
{
/// <summary>
/// Validate User Request for selected Feature
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if(!isAuthorized) {
return false; //User is Not Even Logged In
}
//Your custom logic here
}