在我的AccountController中,我有这样的代码:
ControllerContext.HttpContext.User = new MyAppUserPrincipal(user);
当我在调试器中逐步执行此操作时,我可以看到ControllerContext.HttpContext.User.IsInRole(“Admin”)为真。
接下来,我有一个受自定义属性保护的HomeController:
[AuthorizeMyApp(Roles = "Admin")]
在属性的定义中,我有这个:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var principal = filterContext.HttpContext.User ;
if (! principal.IsInRole(_roles) )
等
这是奇怪的,登录并试图回家后:
principal.Identity.Name具有预期名称,IsAuthenticate为true;然而 a)principal.IsInRole(“Admin”)为false b)(Principal As MyAppUserPrincipal)为null
我在这里做错了吗? (使用MVC2)
答案 0 :(得分:0)
我也是MVC2的新手,但我认为我会参与进来。可能是因为你没有在AuthorizeCore(HttpContextBase httpContext)
方法中进行实际授权吗?
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return httpContext.User.IsInRole("Admin");
}
}
答案 1 :(得分:0)
感谢您的回答,但事实证明,有两个单独的请求正在进行:登录设置cookie,但登录后的重定向(导致授权属性触发)是一个单独的请求。与任何ASP.NET应用程序一样,将自定义用户置于上下文中的位置仍然是global.asax中的Application_BeginRequest。我认为我对MVC技能水平缺乏信心让我对我已经知道的事情感到茫然。很抱歉给任何人带来不便 - 希望这个答案有所帮助。