1

.netでの高度な認証(認証ではない)のための既存のソリューションを探しています。要件は次のとおりです。

  1. アプリケーションエンティティでカスタムアプリケーション操作を定義します。「会議」エンティティの操作「更新」を言います。
  2. ユーザー「User1」に、ID=1のエンティティ「Meeting」でのみ操作「Update」を実行するように許可します。
  3. 操作「更新」が実行されたら、現在のユーザー(「User1」)がID=1の「会議」エンティティにアクセス権を付与されているかどうかを確認します。

したがって、特定のオブジェクトの操作を承認するための既存のソリューションが必要です。私が知っているように、いくつかのソリューション(AzMan)は認証機能を提供しますが、ユニットとしての操作に対してのみです(具体的なオブジェクトに対してではありません)。

4

1 に答える 1

0

のようなものでこれを行うことができますPrincipalPermissionsAttribute。Windows 認証や AzMan などを扱っている場合は、単純にユーザーを作成してロールを割り当て、アプリケーションにログインさせる (または現在ログインしているユーザー情報を使用する) ことができます。カスタム認証を使用する場合は、自分でロールを処理し、 のThread.CurrentPrincipalようなものを設定する必要がありますGenericPincipal。次にPrincipalPermissionsAttributeon メソッドを使用して、特定のロールを持つプリンシパルのみを確保し、メソッドを実行できます。例えば:

[PrincipalPermission(SecurityAction.Demand, Role = @"UserUpdater")]
public void UpdateUserName(string name)
{
//...
}

自分で承認を行いたい場合は、ユーザーを承認したら、次のようにプリンシパルを設定できます。

var identity = new GenericIdentity("Bill");
var roles = new[] { @"UserUpdater" };
var principal = new GenericPrincipal(identity, roles);
Thread.CurrentPrincipal = principal;

SecurityExceptionそのロールを持たないユーザーがメソッドを呼び出した場合に対処する必要があります。仮定は、他の何かが役割をチェックし、単にそのメソッドを実行しないということです...

于 2012-09-10T17:51:10.037 に答える