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

elw*_*wyn 26 asp.net-mvc authorization forms-authentication

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

例如

if(userIsAuthorized) {
    //do stuff
}
else {
    //return to login page
}
Run Code Online (Sandbox Code Playgroud)

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

这个问题与类似,但没有一个答案似乎有效.

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

Aar*_*ght 46

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

if (User.Identity.IsAuthenticated) { ... }
Run Code Online (Sandbox Code Playgroud)

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

if (User.IsInRole("Administrators")) { ... }
Run Code Online (Sandbox Code Playgroud)

User实例是Controller该类的公共属性,因此您始终可以从您编写的Controller访问它.如果没有用户登录,你应该有一个GenericPrincipalUserGenericIdentityUser.Identity,所以不用担心检查空值.


Est*_*aya 5

Request.IsAuthenticated 应该适合你想要做的事情.

  • 如果我在用[[Authorize]`装饰的Action上执行此操作,它可以正常工作,但是如果我在此Action上执行此操作(未使用[Authorize]修饰),则无论我是否登录,它始终为false. (3认同)