5

約8か月前にこの質問を投稿しました。受け入れられた回答は、デフォルトのプロバイダーのルールに従わないことで見逃してしまうことのいくつかに触れています. たとえば、RoleProvider から継承するカスタム RoleProvider を使用しない場合、 のようなクイック ショートカットを使用できなくなりますUser.IsInRole()。答えは、このようなものを「組み込みの配管」と呼んでいます。

私が知りたいのは、この「組み込みの配管」に依存するものの完全なリストを見つけることができる場所と、それらが舞台裏で呼び出しているオーバーライドされたメソッドを示すものです。

たとえばHttpContext.Current.User.IsInRole()、カスタム RoleProvider でオーバーライドされた「IsUserInRole()」メソッドを参照して呼び出していると思いますが、すべてのプロバイダーのそのようなすべてのメソッドについて、HttpContext.Current.User.IsInRole()実際に呼び出していることが明示的に記載されているドキュメントを見たいと思います。 IsUserInRole().

すでに明らかなはずであることは理解していますが (IsInRole() と IsUserInRole() は非常に似ています)、私が質問する動機は、私が気付いていない利用可能な他の種類のショートカットを見て学ぶことです。の。車輪を何度か再発明したような気がしますが、それはわかりません。

4

1 に答える 1

0

それらは実際には同じではありませんが、使用するロールプロバイダーが何であれ、プロバイダーのすべてのロールを含むように現在のユーザーのロールコレクションにデータを入力する可能性があります。

HttpContext.Current.Userここで読むことがIPrincipalできるものです:http://msdn.microsoft.com/en-us/library/system.security.principal.aspx

これは、任意の.NETアプリケーション(もちろんASP.NETを含む)でのIdentityの.NET規則です。使用しているIPrincipalの実装が、RoleProviderの同じ関数を呼び出すことであると確信できる唯一の方法は、プロバイダーに実際に付属している関数を使用することです。

ロールプロバイダーは、httpApplicationオブジェクト(http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx)ごとにインスタンス化され、プリンシパル実装で使用できます。

このMSDN記事の備考セクションを参照してください。http://msdn.microsoft.com/en-us/library/bb340078.aspxIsUserInRoleプリンシパルによるロールプロバイダーの呼び出しは、IsInRole純粋にプリンシパルの実装次第です。プロバイダー。

于 2012-10-19T21:44:35.727 に答える