5

ユーザーがイベントをトリガーするため、スレッドはそのユーザーのコンテキストにあります。接続されているすべてのユーザーを繰り返し処理して、このイベントを送信したいのですが、従来の承認を使用して、イベントを受信する必要があるかどうかを判断したいと考えています。問題は、イベントをトリガーしたユーザーのコンテキストにあるスレッド プリンシパルなどです。

私はスレッドを偽装してから承認を行うことを検討しています。その上でこんな記事を見つけました

http://msdn.microsoft.com/en-us/library/ff647248.aspx#ImpersonationDelegation5

using System.Security.Principal;
…
WindowsIdentity wi = new WindowsIdentity(userName@fullyqualifieddomainName);
WindowsImpersonationContext ctx = null;

try
{
  ctx = wi.Impersonate();
  // Thread is now impersonating you can call the backend operations here...

catch
{
  // Prevent exceptions propagating.
}
finally
{
  // Ensure impersonation is reverted
  ctx.Undo();
}

スレッドがまだ呼び出し元のユーザーのコンテキストにある場合、何ctx = wi.Impersonate();が間違っていますか?

更新 このコードを他のユーザーとして実行したい

provider = AuthorizationFactory.GetAuthorizationProvider();
provider.Authorize(Thread.CurrentPrincipal, Rule)

必要な手順をカバーする小さなブログ投稿 http://andersmalmgren.com/2014/06/12/client-server-event-aggregation-with-role-authorization/

4

1 に答える 1

0

provider.Authorize(principal, context)System.Security.Principal.IPrincipal最初のパラメーターとして持つ ( msdnを参照)。-instance ( ctor-parameter として既に持っている -instanceSystem.Security.Principal.WindowsPrincipalを取る) を作成し、それをパラメーターとして使用しないのはなぜですか?System.Security.Principal.WindowsIdentity

CurrentPrincipalそれ以外の場合:スレッドにはセッターがあることをご存知ですか? その他の質問・回答をご覧ください

于 2014-06-12T09:34:57.467 に答える