如何检查用户是否在Action内部获得授权

时间:2010-02-05 03:01:17

标签: asp.net-mvc forms-authentication authorization

通常我会使用[Authorize]保护我的操作,但这次我需要检查用户是否在操作中获得授权。

例如

if(userIsAuthorized) {
    //do stuff
}
else {
    //return to login page
}

我相信我正在使用'表单身份验证'

这个问题与this类似,但没有给出任何答案。

编辑:我已经做了一些挖掘 - 似乎我在具有[Authorize]的Action上断点,设置了User.Identity,但是在没有它的Actions上,User.Identity为空,即使我已登录

5 个答案:

答案 0 :(得分:44)

如果您只是想知道用户是否已登录:

if (User.Identity.IsAuthenticated) { ... }

如果您尝试执行任何特定于角色的操作:

if (User.IsInRole("Administrators")) { ... }

User实例是Controller类的公共属性,因此您始终可以从您编写的Controller访问它。如果没有用户登录,则GenericPrincipal应为UserGenericIdentity应为User.Identity,因此请不要担心检查空值。

答案 1 :(得分:5)

Request.IsAuthenticated应该适用于你想要做的事情。

答案 2 :(得分:1)

我建议先找出您使用的授权类型。 ;)

您发布的答案是正确的。根据我的记忆,在[Authorize]属性和相关的ActionFilter代码中,MVC在内部调用Page.User.Identity.IsAuthenticated就像那些代码示例一样。

答案 3 :(得分:1)

创建一个这样的属性:OnActionExecuting将先于动作中的其他代码

执行
     public class IsAuthenticatedAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
               //do your validations here. and redirect to somewhere if needed. 
                filterContext.HttpContext.Response.Redirect("/") //this will send user to home.
            }
        }

在您需要检查的每个操作上,添加如下属性:

[IsAuthenticatedAttribute]
public ActionResult ActionName(parameters?)
{
     // no need to worry about checking here.
    //do you action things
}

修改 这个仍然完成操作,然后只重定向它。没那么有用。

答案 4 :(得分:0)

在您的每个操作中添加注解[Authorize]。 Microsoft link. 示例:

public class AdministrationController : Controller
{
     // GET: User/Create
       [Authorize]
        public ActionResult Create()
        { 
     }
}