2010-02-17 43 views
0

提供访问CONTROLER我有一些controlers,只有到处于Admin角色的用户提供访问:如何通过特殊的代码链接

[Authorize(Roles = "Administrators")] 

CONTROLER IM谈论显示器公司的详细信息的客户,我想

www.mysite.com/Company/123?code=0932840329809u0932840

发电机密封:一些网址,例如提供访问该CONTROLER ing代码不会是一个问题,问题是什么是最好的解决方案,通过这个秘密url访问控制器,并且只有管理员没有秘密url才能访问? thnx!

回答

1

您可以通过扩展AuthorizeAttribute来创建自定义属性过滤器。

喜欢的东西:

public class CustomAuthorizeAttribute : AuthorizeAttribute { 

    public string Code { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) { 
    if (base.AuthorizeCore(httpContext)) { 
     return true; 
    } 

    string code = Code ?? GetCode() //parse you code as a parameter or get it from another method 
    if (httpContext.Request["code"] == code) { 
     return true; 
    } 

    return false; 
    } 

} 


//I wouldn't recommend parsing the code like this, I would get it in your action filter 
[CustomAuthorizeAttribute(Code="0932840329809u0932840")] 
public ActionResult Index() { 
    return View(); 
} 

看一看http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

+0

,有没有办法在这个CustomAuthorizeAttribute类获取路线数据?我无法在httpContext中找到路由数据... – Jack 2010-03-01 21:02:21

+0

可以通过httpContext.Request对象获取路由数据,以便获取www.mysite.com/Company/123?code=0932840329809u0932840的查询字符串值,您可以使用httpContext。的Request.QueryString [ “代码”] – 2010-03-03 12:10:42