C#Windowsアプリケーションでの静的ユーザーデータの保存
-
07-07-2019 - |
質問
ActiveDirectoryにアクセスして、アプリの起動時にユーザーのアクセス許可/ロールを取得し、全体を通して持続する必要があるアプリケーションがあります。
ユーザーの権限を再確認するためにすべてのフォームでADを押したくないので、ユーザーの役割と、ログインしているユーザーのその他のデータをアプリケーション内のフォームでグローバルに利用できるようにしたいので、必要に応じて、機能、ボタンなどを適切に隠すことができます。
次のようなもの:
if (UserProperties.Role == Roles.Admin)
{
btnDelete.Visible = false;
}
Windowsアプリに静的なユーザーデータを保存するためのベストプラクティスは何ですか?シングルトンなどのソリューションやグローバル変数は機能する可能性がありますが、これらを回避しようとしました。
各フォームのコンストラクターに渡されるUserオブジェクトは同じくらい悪いですか?
解決
Thread.CurrentPrincipal を設定します WindowsPrincipal 、または GenericPrincipal またはカスタムプリンシパル。次に、 IsInRole :
if (Thread.CurrentPrincipal.IsInRole(Roles.Admin)) {
btnDelete.Visible = false;
}
他のヒント
多分私のJavaScriptの頻繁な使用によって私の判断は曇っていますが、グローバルに意味である何かがあれば、グローバル変数を使用しても大丈夫だと思います。
グローバルは、あるべきではないものをグローバルに公開しているときは悪いです。グローバルは、データの使用目的に対して意味的に正しいものであれば問題ありません。
Windowsアプリでasp.netのプロファイルプロバイダーを使用できます。 @ http://fredrik.nsquared2.com/viewpost.aspx?をご覧ください。 PostID = 244& showfeedback = true
お役に立てば幸いです、 ブルーノ・フィゲイレド http://www.brunofigueiredo.com
アプリケーションインスタンス(またはAppDomain)にデータをスコープする場合、これには静的データ(またはシングルトン)が適しているようです。
ただし、ユーザーのセキュリティ認証情報を実際にキャッシュすることを考えている場合、セキュリティの抜け穴について慎重に検討する必要があります。たとえば、ユーザーがアプリケーションを数日間実行したままにするとどうなりますか?彼らは、最新の資格情報ではなく、昔の資格情報で操作を実行できます。保護する内容によっては、必要に応じて資格情報を確認するか、少なくともキャッシュされた資格情報を定期的に期限切れにすることをお勧めします。