在自定义 Authorize 属性中覆盖 AuthorizeCore 但它允许从 url 直接访问
Overriding AuthorizeCore in custom Authorize attribute but it allowing to direct access from url
我正在尝试构建自定义 AuthorizAttribute 并覆盖 AuthorizeCore
它无处不在
但是当我去访问限制 url 时,如果没有特定的角色是不允许的,它允许我去那里。就像当我点击 URL “http://localhost:8758/Classified/Attributes” 它需要管理员角色但我的代码允许在没有管理员角色的情况下访问它。
做错什么了吗?
这是我的代码。
using System;
using System.Web;
using System.Web.Mvc;
using Classified.Web.Services;
namespace Classified.Web
{
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public IFormsAuthenticationService AuthenticationService { get; set; }
public string RequiredRole;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null) throw new ArgumentNullException("httpContext");
AuthenticationService = new FormsAuthenticationService(new HttpContextWrapper(HttpContext.Current));
var user = AuthenticationService.GetAuthenticatedUser();
if (user == null)
return false;
foreach (var i in user.Roles)
{
if (i.RoleName == RequiredRole)
{
return true;
}
}
return false;
}
}
我自己解决了...
有个小错误,我忘了在控制器之前申请授权。
像那样的东西。
[Authorize]
public class AdminController : Controller
{
.
.
.
我正在尝试构建自定义 AuthorizAttribute 并覆盖 AuthorizeCore 它无处不在 但是当我去访问限制 url 时,如果没有特定的角色是不允许的,它允许我去那里。就像当我点击 URL “http://localhost:8758/Classified/Attributes” 它需要管理员角色但我的代码允许在没有管理员角色的情况下访问它。 做错什么了吗? 这是我的代码。
using System;
using System.Web;
using System.Web.Mvc;
using Classified.Web.Services;
namespace Classified.Web
{
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public IFormsAuthenticationService AuthenticationService { get; set; }
public string RequiredRole;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null) throw new ArgumentNullException("httpContext");
AuthenticationService = new FormsAuthenticationService(new HttpContextWrapper(HttpContext.Current));
var user = AuthenticationService.GetAuthenticatedUser();
if (user == null)
return false;
foreach (var i in user.Roles)
{
if (i.RoleName == RequiredRole)
{
return true;
}
}
return false;
}
}
我自己解决了...
有个小错误,我忘了在控制器之前申请授权。
像那样的东西。
[Authorize]
public class AdminController : Controller
{
.
.
.