【问题标题】:Role.IsUserInRole角色.IsUserInRole
【发布时间】:2013-04-13 06:37:06
【问题描述】:

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

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

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

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

并且用户确实在角色中。

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

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

【问题讨论】:

  • 这不只是意味着User.Identity.Name 中的内容不等于txtUserName.Text.Trim() 中的内容吗?您应该检查这些值。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# asp.net roles


【解决方案1】:

你不能打电话给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 进行验证,但似乎该用户不在角色中。他们在一个单独的请求中。希望这是有道理的。
  • 请看stackoverflow.com/questions/16112536/… 我解释得更好。谢谢
【解决方案2】:

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

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

【讨论】:

  • 这是做同一件事的两种不同方式。只接受一个字符串参数的 Roles.IsUserInRole 会检查当前用户(HttpContext.User,与 User.IsInRole 中的相同)是否处于强项中指定的角色。
  • 谢谢内特。我正在创建一个注册表单,在其中将用户分配给一个角色。当用户登录时,我使用 User.IsInRole 检查他们是否是角色的一部分。为什么这不起作用。
  • 请看stackoverflow.com/questions/16112536/… 我解释得更好。谢谢
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2010-12-12
  • 2011-05-04
  • 2017-01-20
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多