2010-02-17 1 views
0

у меня есть некоторые Controlers, которые обеспечивают доступ только для пользователей, которые находятся в роли администратора:, как обеспечить доступ к контроллеру специального кода в ссылке

[Authorize(Roles = "Administrators")] 

контроллер им говорить о деталях отображают компании для клиентов и я хочу обеспечить доступ к этому контроллеру некоторым URL, например:

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

Generat код не будет проблемой, проблема в том, что является лучшим решением для обеспечения доступа к контроллеру через этот секретный 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

+0

Данные маршрута доступны через объект httpContext.Request, чтобы получить значение строки запроса www.mysite.com/Company/123?code=0932840329809u0932840, вы можете использовать httpContext. Request.QueryString [ "код"] –

Смежные вопросы