C# 如何检测哪个Windows帐户正在运行.net应用程序?

C# 如何检测哪个Windows帐户正在运行.net应用程序?,c#,.net,sharepoint,C#,.net,Sharepoint,我正在编写一个sharepoint web部件。它将日志写入文件(使用StreamWriter)。但是,日志仅为帐户为托管web部件的服务器上的管理员的用户编写。我想检测哪个帐户(可能不是通过使用SPUser)正在执行web部件的代码,以便为权限较低的用户生成日志。可能吗 感谢该框架提供了一个表示经过身份验证的Windows用户的类,以及一个封装用户角色和用户角色成员身份信息的类。此代码片段将为您提供用户所属的组 var id = System.Security.Principal.Window

我正在编写一个sharepoint web部件。它将日志写入文件(使用StreamWriter)。但是,日志仅为帐户为托管web部件的服务器上的管理员的用户编写。我想检测哪个帐户(可能不是通过使用SPUser)正在执行web部件的代码,以便为权限较低的用户生成日志。可能吗


感谢

该框架提供了一个表示经过身份验证的Windows用户的类,以及一个封装用户角色和用户角色成员身份信息的类。

此代码片段将为您提供用户所属的组

var id = System.Security.Principal.WindowsIdentity.GetCurrent();
IdentityReferenceCollection irc = id.Groups;
foreach (IdentityReference ir in irc)
     Console.WriteLine(ir.Value);

有一些方法可以达到相同的结果:

  • Request.LogonUserIdentity
  • HttpContext.Request.LogonUserIdentity
  • Page.User.Identity
我认为其中一个必须在Sharepoint服务器上工作。哪种方法有效取决于您希望包含代码的上下文,您应该在需要的位置放置断点,并在监视窗口中查看上面的构造之一。如果其中一个有效,您将收到一个类型为
System.Security.Principal.WindowsPrincipal
的对象,它为您提供了所需的一切。例如,Name属性是用户名。Groups属性是与用户所属的组相对应的SecurityIdentifier列表。可以使用NTAccount类将SecurityIdentifier转换为名称。(例如,请参见)