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



到目前为止我尝试过的:

我在要保护的文件夹中放置了一个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 应用程序将我重定向到登录页面,这是我需要的beahvior。但是 Web 应用程序不考虑这些角色。这意味着所有用户当前都被阻止访问该页面,即使他们是角色admin的成员。
  2. SecurityAppRoleProvider永远不会被实例化,所以我想我需要在哪里注册自定义角色提供程序?
  3. 没有一个默认的角色提供程序应该与 ASP.Net 身份框架一起使用,而没有自定义代码?

我把它放在主要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>

相关内容

  • 没有找到相关文章

最新更新