3

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

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

就像是:

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

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

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

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 回答