【发布时间】:2019-01-08 11:14:28
【问题描述】:
我正在创建一个具有两种不同授权场景的应用程序:管理员和站点。
如果您尝试访问 /admin 路由而策略未成功,则应将用户重定向到拒绝访问页面。此时用户无法执行任何操作。他们无法访问资源,也无事可做。
如果您尝试访问/site/joes-super-awesome-site 路由而策略未成功,则应将用户重定向到不同拒绝访问。此时用户应该能够请求访问。他们可以采取行动。
实现这一目标的最佳方法是什么?我知道我可以覆盖默认的 OnRedirectToAccessDenied 操作,但这需要一些难看的字符串解析(下面未经测试的示例)。
.AddCookie(options => {
options.Events.OnRedirectToAccessDenied = context => {
// parsing this kinda sucks.
var pathParts = context.Request.Path.Value.Split('/', StringSplitOptions.RemoveEmptyEntries);
if (pathParts?[0] == "site") {
context.Response.Redirect($"/{pathParts[0]}/request-access");
} else {
context.Response.Redirect("/account/access-denied");
}
return Task.CompletedTask;
};
})
【问题讨论】:
标签: asp.net-core asp.net-identity asp.net-core-2.0