【问题标题】:Storing static user data in a C# windows application在 C# Windows 应用程序中存储静态用户数据
【发布时间】:2008-11-07 18:26:14
【问题描述】:

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

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

类似:

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

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

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

【问题讨论】:

    标签: c# singleton global-variables


    【解决方案1】:

    使用WindowsPrincipal、GenericPrincipal 或您的自定义主体设置Thread.CurrentPrincipal。然后,您可以直接拨打IsInRole:

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

    【讨论】:

      【解决方案2】:

      也许我的判断因我频繁使用 javascript 而受到影响,但我认为如果你有一些意味着是全局的,那么使用全局变量是可以的。

      当你在全球范围内公开不应该的事情时,全球范围是不好的。如果在语义上对于数据的预期用途是正确的,则全局是可以的。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          如果您想将数据范围限定到应用程序实例(或 AppDomain),静态数据(或单例)似乎很好。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-16
            • 2020-06-04
            • 1970-01-01
            • 2015-02-09
            • 1970-01-01
            • 2016-01-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多