2010-10-06 28 views

回答

273

您可以通過從布爾屬性讀做:

System.Web.Security.Roles.Enabled 

這是從roleManager元素的enabled屬性在web.config直接讀取:

<configuration> 
    <system.web> 
    <roleManager enabled="true" /> 
    </system.web> 
</configuration> 


更新:
有關更多信息,請查看此MSDN示例:https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx

+0

我如何從代碼而不是'web.config'做到這一點?我試着把它放在'Application_Start'中,它說''這個方法只能在應用程序的預啓動初始化階段被調用。' – Maslow 2013-05-08 15:17:29

+0

這是在web.config中的位置? – 2013-06-03 07:10:00

+0

<結構> \t \t \t \t Infotekka 2013-06-04 18:21:44

11

我在Google的其他地方發現了2條建議,建議a)確保您的db connectionstring(Roles使用的那個)是正確的,並且它的關鍵字拼寫正確,並且b)RoleManager上的Enabled標誌是設置爲true。希望這些幫助之一。它爲我做了。

您是否嘗試檢查Roles.Enabled?此外,您可以檢查Roles.Providers以查看有多少提供程序可用,並且您可以檢查默認提供程序的Roles.Provider。如果它是空的,那麼就沒有一個。

+0

謝謝你的回答。但這不是我想要的。 我想要一個方法來檢查角色管理器功能是否啓用,而不是爲此目的緩存ProviderException。 – gsharp 2010-10-12 07:52:36

44

如果你是因爲你使用新ASP.NETIdentityUserManager來到這裏,你實際上尋找的是RoleManager

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())); 

roleManager將給您看是否存在角色,創建等,加上它創建UserManager

+2

不是真的這個職位已經3歲了;-) – gsharp 2014-04-23 11:18:15

+63

3歲的孩子與什麼有什麼關係?我從Google接受了這篇文章,因爲我正在處理設置身份的問題。既然我找到了答案,下一位處理與Google相同問題的人會被Google帶到這裏... – 2014-04-23 20:23:50

+0

此外,身份用戶管理器還有一個用於獲取給定用戶角色的有用功能: UserManager.GetRolesAsync(User.Identity.GetUserId()); – keithl8041 2015-11-17 22:59:04

7

我發現這個問題,因爲它提到的例外。我的Web.Config沒有任何<roleManager>標籤。我意識到,即使我添加它(如Infotekka suggested),它最終會導致數據庫異常。在遵循這裏其他答案的建議之後,沒有完全解決這個問題。

由於這些Web.Config標籤可以自動生成,因此通過手動添加它們來解決它感覺不對。如果你是在一個類似的案件,撤消到Web.config中和在Visual Studio中的所有更改:

  1. 按下Ctrl鍵+Q,類型的NuGet,然後點擊「管理的NuGet包」 ;
  2. 按下Ctrl鍵+Ë,類型提供商並在列表中就應該顯示「微軟ASP.NET通用提供商核心庫」和「微軟ASP。NET通用提供商爲的LocalDB「(均由微軟創建);
  3. 點擊在他們兩人的安裝按鈕,關閉窗口的NuGet;
  4. 檢查你的web.config,現在你應該至少有一個<providers>標籤內檔案會員SessionState的標籤,也是新RoleManager標籤內,像這樣:

    <roleManager defaultProvider="DefaultRoleProvider"> 
        <providers> 
         <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" /> 
        </providers> 
    </roleManager> 
    
  5. 添加enabled="true"像這樣:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true"> 
    
  6. F6建設,現在它應該是確定進入數據庫更新,而不必是例外:

    1. Ctrl鍵 + Q,類型管理器,點擊「包管理器控制檯」;
    2. update-database -verbose類型和種子方法將運行得很好(如果你還沒有搞錯別的地方),並在你的數據庫中創建幾個表;
    3. 按Ctrl + W¯¯ + 大號打開服務器資源管理器,你應該能夠在數據連接> DefaultConnection>表角色UsersInRoles檢查新創建的表中表!
+1

「_Since Web.Config字段自動生成_」 這不完全正確。雖然許多NuGet軟件包會自動調整配置文件,但沒有設置規則要求他們這樣做。 – 2016-04-19 21:59:47

+0

@KevinR。感謝凱文,我只是重述了這一部分。 – CPHPython 2016-04-20 09:32:34

4

如果您正在使用ASP.NET Identity UserManager你可以得到這樣的,以及:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 

var roles = userManager.GetRoles(User.Identity.GetUserId()); 

如果你已經改變了密鑰的用戶從GUID來INT例如使用此代碼:

var roles = userManager.GetRoles(User.Identity.GetUserId<int>()); 
+0

這對我有用。請說爲什麼如果你投票下來。 – Ogglas 2017-07-06 07:03:10

+0

這沒有工作,因爲你需要將用戶ID轉換爲int,例如:userManager.GetRoles(Convert.ToInt32(User.Identity.GetUserId ())); – toy 2017-07-25 22:47:17

+0

@toy否,將得到int值。無需轉換。當然,對於這個工作身份密鑰需要是int。沒有演員, – Ogglas 2017-07-25 23:15:47

-1
<roleManager 
    enabled="true" 
    cacheRolesInCookie="false" 
    cookieName=".ASPXROLES" 
    cookieTimeout="30" 
    cookiePath="/" 
    cookieRequireSSL="false" 
    cookieSlidingExpiration="true" 
    cookieProtection="All" 
    defaultProvider="AspNetSqlRoleProvider" 
    createPersistentCookie="false" 
    maxCachedResults="25"> 
    <providers> 
    <clear /> 
    <add 
     connectionStringName="MembershipConnection" 
     applicationName="Mvc3" 
     name="AspNetSqlRoleProvider" 
     type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    <add 
     applicationName="Mvc3" 
     name="AspNetWindowsTokenRoleProvider" 
     type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </providers> 
</roleManager> 
相關問題