如何使用Identity框架在C#和ASP.NET中配置基于角色的访问权限?

时间:2017-07-31 08:51:34

标签: c# asp.net asp.net-mvc asp.net-identity asp.net-roles

到目前为止我尝试过:

我将Web.config放置在我要保护的文件夹中,其中包含以下内容,这些内容应仅授予对adminsecond_levelthird_level用户的访问权限。

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="admin"/>
      <allow roles="second_level"/>
      <allow roles="third_level"/>
      <deny roles="first_level"/>
      <deny roles="blocked"/>
      <deny users="*" />
    </authorization>
  </system.web> 
</configuration>

在主Web.config中我放了:

<roleManager enabled="true" defaultProvider="myapp.App_Code.SecurityAppRoleProvider" cacheRolesInCookie="true" createPersistentCookie="false" cookieProtection="All">
  <providers>
    <clear />
  </providers>
</roleManager>

自定义角色提供程序:

 namespace myapp.App_Code
{
    public class SecurityAppRoleProvider : System.Configuration.Provider.ProviderBase
    {
        public SecurityAppRoleProvider()
        {
            var i = 0; // breakpoint here will never be reached?
        }

    }
}    

此时我正在努力解决一些问题:

  1. <deny users="*" />有效。 ASP.NET应用程序将我重定向到登录页面,这是我需要的行为。但Web应用程序不考虑角色。这意味着即使所有用户都是角色admin的成员,也会阻止所有用户访问该页面。
  2. SecurityAppRoleProvider永远不会被实例化,所以我想我需要在其他地方注册自定义角色提供者吗?
  3. 是否有一个默认的角色提供程序,它应该与ASP.Net Identity Framework结合使用而不需要自定义的代码?

1 个答案:

答案 0 :(得分:0)

我将其放入主Web.config以解决问题。

<roleManager enabled="true">
  <providers>
    <clear/>
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/your-app-name"/>
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/your-app-name"/>
  </providers>
</roleManager>