.net-core - ASP.NET Core:[基于策略的授权] 未指定 authenticationScheme,也未找到 DefaultChallengeScheme
问题描述
我使用基于策略的身份验证来根据登录用户的菜单权限提供访问权限。如果菜单可以访问,那么我会调用context.Succeed(requirement);
但出现错误(未经授权的菜单访问),我想将其重定向到主页。我怎样才能做到这一点filterContext.Result
?这是我的代码:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) {
var filterContext = context.Resource as AuthorizationFilterContext;
var sessionObj = SessionManager.GetObjectFromJson<AuthenticateUserInfo>(filterContext.HttpContext.Session, "oLoginModel");
if (context.User == null)
{
// no user authorizedd. Alternatively call context.Fail() to ensure a failure
// as another handler for this requirement may succeed
context.Fail();
//filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "LogOn" }));
return Task.CompletedTask;
}
//var obj = context.Requirements.
bool hasPermission = sessionObj == null ? false : sessionObj.Menus.Any(m => m.ControllerName == requirement.ControllerName); //.Any(= requirement.ControllerName);
if (hasPermission)
{
context.Succeed(requirement);
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index", area = "" }));
}
return Task.CompletedTask;
}
我指的是Redirect From Action Filter Attribute链接,但它适用于 ASP.NET MVC,我已经在 MVC 中实现但在 MVC Core 中不起作用。
解决方案
推荐阅读
- angular - Angular CanDeactivate Guard 递归触发并且无法导航到组件
- javascript - 如何解决承诺拒绝:错误:React Native 中超出了最大更新深度?
- c - 如何在C中的链表中实现markle树插入
- apache-camel - 需要 Apache Camel 在后台每 10 分钟调用一次自定义处理器
- azure - 创建一个没有价值的 azure keyvault 机密?
- angular - 在 ng starrating 模块中,角度、动态值和只读不能一起工作
- spring-boot - 如果我想在启动的 spring boot 程序中添加模块怎么办?
- r - 如何将列设置为R中的索引?
- javascript - 如何将表单和数据一起存储到会话存储中
- react-native - TypeError:null 不是对象(评估'_reactNativeDefaultPreference.default.get')