私は、必要なセキュリティ計画を持つことができるカスタムメンバーシッププロバイダを構築することに取り組んでいます。MembershipProviderのセキュリティパラダイムを変更するにはどうすればよいですか?
私は自分のIPrincipal、IIdentity、およびMembershipProviderを持っています。私は正常に動作している認証があります。私が今実行している問題は承認です。
私が認可スキームで持っている問題は、IPrincipalのIsInRoleビヘイビアにinherintlyです。この動作は、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ページに移動しようとしている誰と解釈されるべきである人ビジネス・オブジェクトへビュー権利を持っている必要があります。
public static bool Authorize(Type type, Access access, IUser user)
、例えば、Person型、ビューのアクセス(列挙型)、およびに対してそれをチェックするために、ユーザがかかります。
は、私はまだのようなシグネチャを持つオーソオブジェクトを持っています。さて、Authorizeの中にコードがありました。
私の問題は、IPrincipalのIsInRoleからどのように私の認証に到達するのですか?私は別のものを試しましたが、どれもうまくいかないようです。私は本当に魔法のストリングのアプローチが嫌いですが、私はそれに固執しているようです。強く型付けされた方法でそれを構築する方法があったなら、私は間違いなくそれを好むでしょう。私が考えていないより良い方法がありますか?
あなたの提案をありがとうJosh、私はPermissionFactoryを使って魔法のストリングの生成を隔離する考えが好きです。しかし、トークンの生成は実際にはサイトマップ内で有用ではありません。このシナリオでは、どのようにサイトマップを扱いますか?彼らは魔法の弦を保つ? – Joseph
サイトマップを動的に構築する場合は、文字列を隠すことができますが、その日の終わりにはまだ文字列になります。私は役割の仕組みが決して好きではありませんでした。ロールは非常に広いので、ロールと能力が常に必要です。これがモデルに焼かれていて、うまくいけばいいと思います。 – JoshBerke
@ジョッシュ私のパラダイムは根本的に異なるので、私はそれを全面的に戦わなければならない。それは本当に面倒です。 – Joseph