web-dev-qa-db-ja.com

役割マネージャー機能が有効になっていません

次の ProviderException を取得しました:

役割マネージャー機能が有効になっていません。

ここまでは順調ですね。

Role Managerが有効になっているかどうかを確認するために呼び出すことができるメソッドはどこかにありますか?

189
gsharp

これを行うには、次のブールプロパティから読み取ります。

System.Web.Security.Roles.Enabled

これは、web.configenabled要素のroleManager属性からの直接読み取りです。

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


更新:
詳細については、次のMSDNサンプルを参照してください。 https://msdn.Microsoft.com/en-us/library/aa354509(v = vs.110).aspx

295
Infotekka

新しいASP.NETIdentityUserManagerを使用しているためにここに来た場合、実際に探しているのはRoleManagerです:

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

roleManagerは、ロールが存在するかどうか、作成などを確認するためのアクセス権を提供し、さらにUserManagerに対して作成されます。

51
Serj Sagan

私は、a)db接続文字列(Rolesが使用しているもの)が正しいこと、そのキーのスペルが正しいことを確認すること、b)RoleManagerのEnabledフラグがtrueに設定されていることを示唆する2つの提案をGoogle経由で見つけました。それらのいずれかが役立つことを願っています。それは私のためにした。

Roles.Enabledを確認しましたか?また、Roles.Providersを使用して、使用可能なプロバイダーの数を確認したり、デフォルトのプロバイダーのRoles.Providerを確認したりできます。 nullの場合はありません。

11
Wade

この質問は、例外が言及されているために見つかりました。私のWeb.Configには<roleManager>タグがありませんでした。 Infotekkaが提案したように として追加しても、データベース例外になってしまうことに気付きました。ここの他の回答の提案に従った後、問題を完全に解決したものはありませんでした。

これらのWeb.Configタグは自動的に生成できるため、手動で追加して解決するのは間違っていると感じました。同様の場合は、Web.ConfigおよびVisual Studioで行ったすべての変更を元に戻します。

  1. 押す Ctrl+Qnugetと入力し、[NuGetパッケージの管理]をクリックします。
  2. 押す Ctrl+Eprovidersと入力し、リストに「Microsoft ASP.NET Universal ProvidersCore Libraries」および「Microsoft ASP.NET Universal Providersfor LocalDB」(両方ともMicrosoftにより作成);
  3. 両方の[インストール]ボタンをクリックして、NuGetウィンドウを閉じます。
  4. Web.configを確認すると、少なくとも1つの<providers>タグがProfileMembershipSessionStateタグ内にあり、新しいタグ内にもあるはずです- 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+Qmanagerと入力し、「Package Manager Console」をクリックします。
    2. update-database -verboseと入力すると、Seedメソッドが正常に実行され(他の場所で混乱していない場合)、データベースにいくつかのテーブルが作成されます。
    3. 押す Ctrl+W+L サーバーエクスプローラーを開くと、データ接続> DefaultConnection>テーブルRolesおよびUsersInRoles新しく作成されたテーブルの中のテーブル!
8
CPHPython

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>());
5
Ogglas