ユーザーがイベントをトリガーするため、スレッドはそのユーザーのコンテキストにあります。接続されているすべてのユーザーを繰り返し処理して、このイベントを送信したいのですが、従来の承認を使用して、イベントを受信する必要があるかどうかを判断したいと考えています。問題は、イベントをトリガーしたユーザーのコンテキストにあるスレッド プリンシパルなどです。
私はスレッドを偽装してから承認を行うことを検討しています。その上でこんな記事を見つけました
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/