Role.IsUserInRole

本文关键字:IsUserInRole Role | 更新日期: 2023-09-27 18:10:08

我将一个用户添加到一个角色中,如下所示(注意,我在我的机器上运行了下面的代码):

    Roles.AddUserToRole(oMU.UserName, "Role1");

使用以下代码检查用户是否在角色中:

    if (Roles.IsUserInRole(txtUserName.Text.Trim(), "Role1"))  

,用户确实在角色中。

我执行以下命令检查当前登录的用户是否在Role1中,但无法输入if语句—为什么?:

     if (User.IsUserInRole("Role1"))
     {
       // does not enter this code 
     }

Role.IsUserInRole

不能调用Roles.IsUserInRole("Role1")

一旦用户被分配到这样的角色-

Roles.AddUserToRole(oMU.UserName, "Role1");

为什么?

IPrincipal对象仅在Application_AuthenticateRequest上注入到HttpContext.Current.User

因此,您必须等待下一个请求才能访问Roles.IsUserInRole("Role1")

更新

确保cacheRolesInCookie设置为false,因为它有一些问题。

<roleManager enabled="true" cacheRolesInCookie="false" 
   defaultProvider="DefaultRoleProvider">
      ....
</roleManager>

我认为应该是User.IsInRole而不是Roles.IsUserInRole,或者通过传递Roles.IsUserInRole(User.Identity.Name,"Role1")来明确指定用户名作为参数

角色。IsUserInRole带一个参数,为用户名调用GetCurrentUser(),该用户名将从CurrentPrincipal中拉出它。听起来好像您当前登录的用户与当前主体上的用户不同。