必要なセキュリティ スキームを実現できるカスタム メンバーシップ プロバイダーの構築に取り組んでいます。
私は独自の IPrincipal、IIdentity、および MembershipProvider を持っています。認証は正常に機能しています。私が今直面している問題は承認です。
私が承認スキームで抱えている問題は、本質的に IPrincipal の IsInRole 動作にあります。この動作は、ASP.NET Web フォームのさまざまな機能と密接に関連しています。私の主な関心事は、サイトマップの承認です。可能であれば使用したいからです。
したがって、伝統的に次のようなサイトマップを持っているかもしれません:
<siteMap xmlns="blahblah">
<siteMapNode url="PersonView.aspx"
title="View Person"
description="View the details of a person"
roles="ViewerRole" />
</siteMap>
ここで、PersonView.aspx ページに移動しようとする人は、ViewerRole を持っている必要があります。ここで私の問題が発生します。ユーザーの役割に自分の承認を結びつけたくありません。代わりに、承認を実行中の動作に関連付けて、舞台裏の基になるものに承認を処理させたいと考えています。
だから私が本当に欲しいのは、代わりに次のようなものです:
<siteMap xmlns="blahblah">
<siteMapNode url="PersonView.aspx"
title="View Person"
description="View the details of a person"
roles="Person|View" />
</siteMap>
これは、PersonView.aspx ページにアクセスしようとするすべてのユーザーが、 Personビジネス オブジェクトに対する表示権限を持っている必要があると解釈する必要があります。
次のような署名を持つ Authorizer オブジェクトが既にあります。
public static bool Authorize(Type type, Access access, IUser user)
たとえば、Person タイプ、View アクセス (列挙型)、およびそれをチェックするユーザーが必要です。これで、Authorize 内のコードがわかりました。
私の問題は、IPrincipal の IsInRole から Authorize にアクセスするにはどうすればよいですか? 私はさまざまなことを試しましたが、どれもうまくいかないようです。私は魔法の文字列のアプローチが本当に好きではありませんが、私はそれで立ち往生しているようです. 強く型付けされた方法でビルドする方法があれば、代わりにそれを好むでしょう。私が考えていないこれを行うためのより良い方法はありますか?