2016-04-29 49 views
-1

我有一个带有用户的数据库,用户可以有不同的角色。MVC Web API自定义基本认证

我想为我的MVC Web API实现基本身份验证,我希望能够使用Authorize标记标记方法,并通过userType作为参数。

[Authorize(admin)] 
public bool Test() 
{ 
} 

[Authorize(user)] 
public bool Test1() 
{ 
} 

我无法弄清楚如何使这一属性,比如我怎么做,简单地使一个方法总是返回false属性?

[AttributeUsage(AttributeTargets.All)] 
public class TestAttribute: System.Attribute 
{ 
    //Return false? 
} 

我正在寻找一些建议。

编辑:

我做了以下类:

ilterContext.HttpContext.Response.StatusCode = 401; 
        filterContext.Result = new EmptyResult(); 
        filterContext.HttpContext.Response.End(); 
       } 
      } 
     } 

     private void CacheValidateHandler(HttpContext context, object data, ref HttpValidationStatus validationStatus) 
     { 

然后我添加[BasicAuthorize]的方法,但它还是让我访问它没有基本的autentication。

有什么想法吗?

+0

您想检查角色,但是您的代码会根据数据层检查用户名和密码。你的角色检查在哪里? –

+0

我只是想让基本认证工作,但我现在无法获得任何代码来运行BasicAuthorizeAttribute。 –

回答

0

我建议你阅读一些关于授权和认证的基础知识以及如何应用Authorize属性。

角色开箱即用。只需使用Authorize属性的内置功能:例如:

[Authorize(Roles="admin")] 
public bool Test() 
{ 
} 

如果你需要,你需要从System.Web.Mvc.AuthorizeAttribute而不是从System.Attribute继承自定义实现。其他的一切都从这里直截了当。这里解释的基本示例如下:Basic Authorization Attribute in ASP.NET MVC

+0

我尝试了你的链接中的代码,但仍然无效,更新了我的问题,请参阅。 –

+0

看起来你只是在不理解背后的原理的情况下复制和粘贴代码。你有一个角色“管理员”如果没有,这可能是我提到的虚拟示例不起作用的原因。此外,按照其预期用途使用“Roles”属性。 –