asp.net核心检查是否对经过身份验证的用户授权了操作

时间:2019-07-11 07:34:25

标签: authorization asp.net-core-2.2 asp.net-core-tag-helpers

在asp.net中,我有一个htmlhelper,仅当用户被授权访问该区域/控制器/操作时,该链接才会生成链接。

如果用户被授权是通过自定义授权属性设置的。

public static bool ActionAuthorized<TModel>(this HtmlHelper<TModel> htmlHelper, string actionName, string controllerName)
{
    ControllerBase controllerBase = string.IsNullOrEmpty(controllerName) ? htmlHelper.ViewContext.Controller : htmlHelper.GetControllerByName(controllerName);
    ControllerContext controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext, controllerBase);
    ControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(controllerContext.Controller.GetType());
    ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName);

    if (actionDescriptor == null)
    {
        return false;
    }

    FilterInfo filters = new FilterInfo(FilterProviders.Providers.GetFilters(controllerContext, actionDescriptor));

    AuthorizationContext authorizationContext = new AuthorizationContext(controllerContext, actionDescriptor);
    foreach (IAuthorizationFilter authorizationFilter in filters.AuthorizationFilters)
    {
        authorizationFilter.OnAuthorization(authorizationContext);
        if (authorizationContext.Result != null)
        {
            return false;
        }
    }
    return true;
}

我现在想做同样的事情,但是要有一个标签助手。因此,假设您处于标记助手Process(Async)重写方法中,那么我如何确定用户是否有权访问该区域/控制器/动作?

结果应如下所示:

<a asp-area="area51" asp-controller="aliens" asp-action="phonehome" asp-authorized>

如果您可以指向实际进行授权检查的asp.net核心资源,那可能已经有所帮助。

我发现以下内容,但这不是我所需要的。在这种情况下,必须在标签本身上设置授权规范。 https://www.davepaquette.com/archive/2017/11/05/authorize-tag-helper.aspx

0 个答案:

没有答案