3

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

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

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

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

并且用户确实在角色中。

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

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

2 回答 2

2

你不能打电话Roles.IsUserInRole("Role1")

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

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

为什么?

IPrincipal 对象仅注入到HttpContext.Current.Useron Application_AuthenticateRequest

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

更新

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

<roleManager enabled="true" cacheRolesInCookie="false" 
   defaultProvider="DefaultRoleProvider">
      ....
</roleManager>
于 2013-04-19T19:27:10.087 回答
0

我认为它应该User.IsInRole代替Roles.IsUserInRole,或者通过传递专门指定用户名作为参数Roles.IsUserInRole(User.Identity.Name,"Role1")

Roles.IsUserInRole 使用一个参数调用 GetCurrentUser() 获取用户名,该用户名将从 CurrentPrincipal 中提取。听起来您当前登录的用户与当前主体上的用户不同。

于 2013-04-19T19:13:41.267 回答