2010-06-28 60 views
0

在我的AccountController,我有這樣的代碼:與MVC2自定義授權似乎有問題,IsInRole()

ControllerContext.HttpContext.User = new MyAppUserPrincipal(user); 

當我通過這個在調試步驟我可以看到ControllerContext.HttpContext.User。 IsInRole(「Admin」)爲true。

接下來,我有一個自定義屬性保護的HomeController的:

[AuthorizeMyApp(Roles = "Admin")] 

在屬性的定義,我有這樣的:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    var principal = filterContext.HttpContext.User ; 
    if (! principal.IsInRole(_roles)) 

這裏是很奇怪登錄並嘗試返回首頁後:

principal.Identity.Name has預期的名字和IsAuthenticate是真的;然而 a)principal.IsInRole(「Admin」)爲假 b)(principal As MyAppUserPrincipal)爲空

我在這裏做錯了什麼? (使用MVC2)

回答

0

我也是MVC2的新手,但認爲我會插手。難道這是因爲您沒有在AuthorizeCore(HttpContextBase httpContext)方法中進行實際授權嗎?

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return httpContext.User.IsInRole("Admin"); 
    } 
} 
0

感謝您的回答,但事實證明是,有兩個單獨的請求事情:登錄設置cookies,但是登錄之後重定向(這引起了授權屬性爲火)是一個單獨的請求。與任何ASP.NET應用程序一樣,將自定義用戶置於上下文中的位置仍然是global.asax中的Application_BeginRequest。我認爲我對MVC技能水平缺乏信心讓我知道我已經知道該怎麼做。抱歉給任何人帶來不便 - 希望這個答案有幫助。