3

アプリの起動時にユーザーのアクセス許可/役割を取得するためにActiveDirectoryにアクセスし、全体を通して存続する必要があるアプリケーションがあります。

すべてのフォームでADを押してユーザーの権限を再確認したくないので、ユーザーの役割と、ログインしているユーザーの他のデータをアプリケーション内の任意のフォームでグローバルに利用できるようにして、適切に使用できるようにします。必要に応じて、機能やボタンなどを非表示にします。

何かのようなもの:

if (UserProperties.Role == Roles.Admin)
{
    btnDelete.Visible = false;
}

Windowsアプリに静的ユーザーデータを保存するためのベストプラクティスは何ですか?シングルトンやグローバル変数などのソリューションは機能する可能性がありますが、私はこれらを回避しようとしていました。

各フォームのコンストラクターに渡されるUserオブジェクトも同様に悪いですか?

4

4 に答える 4

4

WindowsPrincipalGenericPrincipalまたはカスタム プリンシパルのいずれかでThread.CurrentPrincipalを設定します。次に、IsInRoleを呼び出すだけです。

if (Thread.CurrentPrincipal.IsInRole(Roles.Admin)) {
   btnDelete.Visible = false;
}
于 2008-11-07T19:22:40.843 に答える
2

たぶん私の判断はJavaScriptを頻繁に使用することで曇っていますが、グローバルであることが意図されているものがあれば、グローバル変数を使用しても問題ないと思います。

あるべきではないものをグローバルに公開する場合、グローバルは悪いことです。グローバルは、データの使用目的に対して意味的に正しい場合は問題ありません。

于 2008-11-07T18:31:26.143 に答える
0

Windowsアプリのasp.netからプロファイルプロバイダーを使用できます。@http://fredrik.nsquared2.com/viewpost.aspx?PostID=244&showfeedback=trueでチェックしてください

それがお役に立てば幸いです、ブルーノフィゲイレド http://www.brunofigueiredo.com

于 2008-11-07T18:30:53.913 に答える
0

データの範囲をアプリケーション インスタンス (または AppDomain) に限定する場合は、静的データ (またはシングルトン) で問題ないようです。

ただし、実際にユーザーのセキュリティ資格情報をキャッシュすることについて話していることを考えると、セキュリティの抜け穴について慎重に検討する必要があるかもしれません。たとえば、ユーザーがアプリケーションを何日も実行したままにしておくとどうなりますか? 最新の資格情報ではなく、数日前の資格情報で操作を実行している可能性があります。何を保護しているかによっては、資格情報をオンデマンドでチェックするか、少なくともキャッシュされた資格情報を定期的に期限切れにする方がよい場合があります。

于 2008-11-07T19:29:42.327 に答える