我有一个管理区,我只想管理员进入该区域。我考虑将授权属性添加到Admin区域中的每个控制器。有没有一个优雅的解决方案,或者框架本身没有这个特性?
编辑:很抱歉,我应该在之前提到这一点。我使用的是从AuthorizeAttribute派生的自定义AuthorizedAttribute。
发布于 2015-09-11 09:16:40
我刚开始做这个...但到目前为止,这对我来说工作得很好。
我创建了一个自定义AuthorizeAttribute类,并将其添加到RegisterGlobalFilters函数中。
在CustomAuthorizeAttribute中,我根据它所在的区域检查各种条件。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomAuthorizeAttribute());
filters.Add(new HandleErrorAttribute());
}
}
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var routeData = httpContext.Request.RequestContext.RouteData;
var controller = routeData.GetRequiredString("controller");
var action = routeData.GetRequiredString("action");
var area = routeData.DataTokens["area"];
var user = httpContext.User;
if (area != null && area.ToString() == "Customer")
{
if (!user.Identity.IsAuthenticated)
return false;
}
else if (area != null && area.ToString() == "Admin")
{
if (!user.Identity.IsAuthenticated)
return false;
if (!user.IsInRole("Admin"))
return false;
}
return true;
}
}
发布于 2010-02-23 23:12:07
如果您的所有管理代码都在一个控制器中,则向整个类添加Authorize。
[Authorize]
public class AdminController : Controller
{
.......
}
发布于 2019-12-16 19:15:59
在startup.cs中使用区域名称和带AuthorizeAreaFolder
的斜杠对我来说很有效:
services.AddRazorPages()
.AddRazorPagesOptions(options => options.Conventions.AuthorizeAreaFolder("Admin", "/"))
.WithRazorPagesAtContentRoot();
https://stackoverflow.com/questions/2319157
复制相似问题