c#基于Windows当前用户的应用程序授权

时间:2014-08-15 18:53:23

标签: c# authorization

我写了一个小应用程序,我需要添加一些授权安全提示。

简单示例: 我有一个包含两个按钮的WinForm:btnAdd和btnDelete。我想要那个:

  • 如果当前用户在管理员组中,则会显示上面的两个按钮

  • else(如果不在管理员组中(如猜测帐户)),只会显示btnAdd。

我该怎么做

1 个答案:

答案 0 :(得分:1)

您应该能够构造一个WindowsPrincipal对象,然后检查用户是否处于您期望的角色,并使用返回值将按钮设置为可见或不可见。像下面的东西

using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
{
    WindowsPrincipal principal = new WindowsPrincipal(identity);

    // using WindowsBuiltInRole.Administrator or "BUILTIN\\Administrators" should work
    btnAdd.Visible = principal.IsInRole(WindowsBuiltInRole.Administrator);
}

更新的代码有效,我已经测试了这个,我是本地管理员,因为你想测试当前用户,WindowsIdentity.GetCurrent()实际上更干净。

如果您需要确认您是否是该计算机的管理员,您可以通过MMC检查组成员身份,但如果涉及任何域组并且您没有访问权限,则无法访问除非您有权访问AD,否则请通过MMC进行检查。

验证用户是否是组成员的可靠方法是在命令提示符窗口中运行以下内容

获取本地管理员组的成员:

net localgroup administrators

获取域组的成员:如果例如mydomain\WorkstationAdmins是本地Administrators组的成员且 userId 是其成员,则必须这样做 mydomain \ WorkstationAdmins (因此是wokstation的管理员)

net group "WorkstationAdmins" /domain