在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