【问题标题】:Roles - Issue with User.IsInRole角色 - User.IsInRole 的问题
【发布时间】:2013-04-20 04:10:20
【问题描述】:

我有一个注册页面,一旦用户点击提交按钮,用户就会被分配到如下角色:

    MembershipUser oMU;

    if (!(Roles.RoleExists("Stream")))
    {
        Roles.CreateRole("Stream");
    }

    oMU = Membership.CreateUser(txtUserName.Text.Trim(), txtPassword.Text.Trim(), txtEmail.Text.Trim());

    Membership.UpdateUser(oMU);

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

当用户进入登录屏幕时,我有以下信息:

当用户登录时,我需要确保他们确实是该角色的一部分:

    if (User.IsInRole("Stream"))
    {

    }

但它永远不会进入 User.IsInRole 块。我需要做什么才能让注册的用户成为角色的一部分,以便它与 User.IsInRole 一起使用。

请注意,我有一个这样的文件夹,因此我需要它们成为 Streaming Role 的一部分:

    <?xml version="1.0"?>
   <configuration>
   <system.web>
    <authorization>
        <deny users="*" />
        <allow roles="Stream" />           
    </authorization>
    </system.web>
  </configuration>

【问题讨论】:

    标签: asp.net role


    【解决方案1】:

    &lt;allow roles="Stream" /&gt; 移到&lt;deny users="*" /&gt; 上方。否则,所有用户都将被拒绝。

    <configuration>
       <system.web>
        <authorization>
            <allow roles="Stream" />    
            <deny users="*" />       
        </authorization>
        </system.web>
    </configuration>
    

    确保您在 web.config 中拥有会员资格和 RoleManager

    这是示例 -

    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <clear/>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="XXXXXSqlConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="XXXXX"/>
      </providers>
    </membership>
    <roleManager enabled="true" cacheRolesInCookie="false" defaultProvider="DefaultRoleProvider">
      <providers>
        <clear/>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="XXXXXSqlConnection" applicationName="XXXXX"/>
      </providers>
    </roleManager>
    

    【讨论】:

    • 这并不能真正回答所提出的问题(如果我没看错的话)。虽然我同意 OP 应该这样做。
    • 是的,谢谢 Win。但是为什么它甚至没有到达 if (User.IsInRole("Stream")) { }
    • 能否确保将 RoleManagercacheRolesInCookie 设置为 false 在 web.config 中?
    • 我没有。我假设我应该在我的根 web.config 中执行此操作?
    • 理论上你应该用你自己的覆盖默认值,因为你可能不知道你的托管服务器的 web.config 和 machine.config 里面有什么。请参阅我的更新答案。
    【解决方案2】:

    尝试使用HttpContext获取当前登录用户:

    if (HttpContext.Current.User.IsInRole("Stream"))
    {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 2020-12-31
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多