2017-07-31 100 views
2

我迄今爲止嘗試:如何在C#和ASP.NET中使用Identity框架配置基於角色的訪問權限?

我我要保護有以下內容應授予僅adminsecond_levelthird_level用戶訪問的文件夾中放置一個Web.config

<?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. The <deny users="*" />作品。 ASP.NET應用程序將我重定向到登錄頁面,這是我需要的行爲。但是這些角色並沒有被Web應用程序所考慮。這意味着即使所有用戶都是角色admin的成員,當前也被阻止訪問該頁面。
  2. SecurityAppRoleProvider將永遠不會實例化,所以我想我需要註冊自定義角色提供者,否則在哪裏?
  3. 是不是有一個默認的角色提供程序應該與ASP.Net身份框架一起使用,而不需要代碼自定義?

回答

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>