3

質問は以下のとおりです。回答に必要なものを確認するために最後までお読みください...

私は持っている

  • VS 2013
  • Razor ビューを使用した MVC 5
  • Dapper DAL カスタム UserManager および UserStore/User : IUser< int >

CustomUser : IUser< int > および CustomRole : IRole< int > に基づいて、独自の UserManager、RoleManager、UserStore、RoleStore を構築します。

パスワードの変更、忘れたパスワードの回復、ログイン、ログアウト...すべてうまくいきます。

ただし、かみそりビューでは、使用しようとすると:

User.IsInRole("Administrators");

他のモジュールから SQL 例外が発生します (これはおそらく iPrincipal Identity クラスで発生しますか???)。

System.Data.SqlClient.SqlException occurred
  _HResult=-2146232060
  _message=A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
  Source=.Net SqlClient Data Provider
  ErrorCode=-2146232060
  _doNotReconnect=false
  Class=20
  LineNumber=0
  Number=-1
  Server=""
  State=0
  StackTrace:
       at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
  InnerException: <null>

しかし、私は呼び出すことができます

var user = AsyncHelpers.RunSync<CloudUser>(() => UserManager.FindByNameAsync(User.Identity.Name));
ViewBag.IsInAdminRole = AsyncHelpers.RunSync<bool>(() => UserManager.IsInRoleAsync(user.Id, "Administrators"));

私のコントローラーサーバーコードでは....

質問:

  1. User.IsInRole と UserManager/UserStore および/または RoleManager との関係は何ですか?

  2. Razor ビューで User.IsInRole("Administrators") を取得して、カスタム ID 認証実装を使用する必要があることを「理解」させるにはどうすればよいですか?

4

1 に答える 1

0

ClaimsPrincipalユーザーがサインインしているときに実装が提供されていないと思われます。

@Userである必要がClaimsPrincipalありIsInRole( source を参照)、データベースには到達しませんが、プリンシパルの ID に設定されたタイプ "Role" のクレームをチェックします。この例外が表示された場合、IPrincipal は「ClaimsPrincipal」とは異なります。

リンクした回答を読みましたが、これが Identity フレームワークで使用するのに最適なソリューションではないと思います。答えは Pre-Identity で、MembershipProvider について話します。MembershipProvider を扱うときは、このようなことをしなければなりませんでした。Identity は、カスタム機能を実行するためのより優れたクリーンな方法を提供します。

.Net フレームワークによって提供される実装CustomPrincipalと使用はお勧めしません。から IPrincipal を返すときに、プリンシパルにロール名を持つClaimsPrincipal型のクレームを追加するだけです。ClaimTypes.RoleUserManager.CreateIdentityAsync

于 2014-09-27T23:02:37.787 に答える