在C#windows应用程序中存储静态用户数据

时间:2008-11-07 18:26:14

标签: c# singleton global-variables

我有一个应用程序需要点击ActiveDirectory来获取应用程序启动时的用户权限/角色,并持续存在。

我不想在每个表单上点击AD来重新检查用户的权限,因此我希望用户的角色以及登录用户的其他数据可能在应用程序中的任何表单上全局可用,因此我可以在必要时正确隐藏功能,按钮等。

类似的东西:

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

在Windows应用中存储静态用户数据的最佳做法是什么?诸如Singleton或全局变量之类的解决方案可能有效,但我试图避免这些。

是否一个User对象被传递给每个表单的构造函数同样糟糕?

4 个答案:

答案 0 :(得分:4)

使用Thread.CurrentPrincipalWindowsPrincipal或您的自定义主体设置GenericPrincipal。然后,您只需拨打IsInRole

即可
if (Thread.CurrentPrincipal.IsInRole(Roles.Admin)) {
   btnDelete.Visible = false;
}

答案 1 :(得分:2)

也许我经常使用javascript会让我的判断蒙上阴影,但我认为如果你有一些意味着是全局的,那么使用全局变量就可以了。

当你在全球范围内展示不应该的东西时,全球是坏的。如果对于数据的预期用途在语义上是正确的,则Global是可以的。

答案 2 :(得分:0)

您可以在Windows应用程序中使用asp.net中的配置文件提供程序。查看@ http://fredrik.nsquared2.com/viewpost.aspx?PostID=244&showfeedback=true

希望它有所帮助, 布鲁诺菲格雷多 http://www.brunofigueiredo.com

答案 3 :(得分:0)

如果要将数据范围限定为应用程序实例(或AppDomain),静态数据(或单例)似乎没问题。

但是,鉴于您正在谈论实际缓存用户的安全凭据,您可能需要仔细考虑安全漏洞。例如,如果用户离开应用程序运行数天会发生什么?他们可以在他们的日历凭证而不是他们最新的凭证下执行操作。根据您所保护的内容,您最好根据需要检查凭据,或者至少定期使缓存凭证到期。