2009-07-24 4 views
3

Microsoft AzManを使用するWebアプリケーションを作成しましたが、複数のユーザーがいるまでうまく動作します。私はAzManが複数のユーザーに対して同じものをキャッシュしていることをほぼ100%確信しています。AzManアクセスチェックキャッシュを更新するには?

少し単純化すると、私が見ている問題は、ユーザーAがサイトにアクセスして完全なアクセス権を持っていることです。ユーザーには正しいアクセス権が与えられ、正常に動作します。その後、ユーザーBはサイトにアクセスし、表示アクセス権しか持ちませんが、AzManは既にユーザーAのフルアクセスを見ているため、ユーザーBにも完全にアクセスできます。

すべての状況で機能する唯一の方法であるため、クライアントコンテキストの作成時にAddStringSidsメソッドを使用しています。これに問題はありますか?私たちは、トークンからクライアントコンテキストを作成していたときには、この問題は発生しませんでした。

以下は、私がコンテキストを作成するために使用している正確なコードです。 appはIAzApplication2変数、ClientContext.SIDは問題のユーザーのSecurityIdentifierです。

IAzClientContext2 cctx = app.InitializeClientContext2("AppNameHere", null); 
cctx.AddStringSids(new object[] { (object)ClientContext.SID.ToString() } as object); 

EDIT:それは役割を意識するアプリケーションを必要とするので、私はすべてのASP.Netのロールプロバイダを使用していません。私はCOM APIのみを使用しています。

EDIT 2:また、ユーザーBが最初にログインした場合、ユーザーAはログインしたときにアクセス権を持たないため、最高レベルのアクセスを維持するだけではありません。

答えて

1

私はこの質問を削除することを考えましたが、愚かな間違いで他の人を助けるためにここに残しておく方がよいと思います。 AzManは、複数のユーザー間でアクセスチェックの結果をキャッシュしません。 AddStringSidsメソッドは問題ありません。問題は私のコードにありました。

私はクライアントコンテキストへの参照を保持していた静的変数を持っていましたが、アプリケーションの存続期間中に一度だけ作成され、ユーザー要求の寿命は作成されませんでした。この静的変数は、最初の人からアクセスへのアクセスを引き起こした原因です。

私の上司が言うように、それは愚かなプログラマーミス、またはSBCK(議長とキーボードの間の短い)でした。 ASP.Netで同様の問題が発生している場合は、変数をチェックし、静的変数の問題がないことを確認してください。

関連する問題