3

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

少し簡単にするために、私が見ている問題は、ユーザー 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 のみを使用しています。

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

4

1 に答える 1

1

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

クライアント コンテキストへの参照を保持する静的変数があり、ユーザー リクエストの存続期間ではなく、アプリケーションの存続期間中に一度だけ作成されます。この静的変数が原因で、最初にアクセスした人のアクセス権を取得しました。

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

于 2009-07-24T20:47:22.837 に答える