在自定义Authorize属性中覆盖AuthorizeCore,但它允许从url直接访问

时间:2017-09-11 12:58:18

标签: c# asp.net-mvc attributes authorize-attribute form-authentication

我正在尝试构建自定义AuthorizAttribute并覆盖AuthorizeCore 它在每个地方工作得很好 但是当我去访问限制网址时,如果没有特定的角色,则允许我去那里。比如当我点击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;

        }
    }

1 个答案:

答案 0 :(得分:0)

我自己解决了......

有一点错误,我忘了在控制器之前申请授权 这样的事情。

[Authorize] public class AdminController : Controller { . . .