1

我正在使用 SPSecurity.RunWithElevatedPrivileges .... 允许“模拟”超级用户“sharepoint\system”帐户。

“sharepoint\system”帐户是当前 Web 应用程序的应用程序池标识的别名吗?

因此,如果我的应用程序池身份是自定义用户(带有电子邮件和其他信息),我该如何检索其信息?(我试图获取的信息是电子邮件地址......自定义应用程序池用户电子邮件有价值,“sharepoint\system”帐户电子邮件没有价值!!!)

我还尝试使用 WindowsIdentity.Impersonate(IntPtr.Zero) 方法检索 appPool 身份,但是……什么都没有!

所以有什么想法吗???

4

1 回答 1

2

注意事项:

  • SPSecurity.RunWithElevatedPrivileges委托方法中运行的代码在SharePoint\System账户下运行
  • SharePoint\System帐户具有超级用户权限。但是它在 SharePoint 运行时环境中被识别,但不被 Windows 安全系统识别,即它不代表运行 AppPool 的帐户
  • 当试图访问服务器文件系统/数据库等 SP 环境之外的资源时,只有 AppPool 身份出现
  • 如果您想访问运行 AppPool 的用户帐户的电子邮件地址,您可以尝试...

    SPSecurity.RunWithElevatedPrivileges(delegate {
            using (SPSite siteCollection = new SPSite("Url"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {
                    Console.WriteLine(string.Format("Current Logged in User is {0}. And Email Id: {1} ", site.CurrentUser.LoginName ,site.CurrentUser.Email));
                    appPoolAccount = siteCollection.WebApplication.ApplicationPool.Username;
                    SPUser appPoolUser = site.Users[appPoolAccount] as SPUser;
                    Console.WriteLine(string.Format("AppPool User is {0}. And Email Id: {1} ", appPoolUser.LoginName, appPoolUser.Email));
                    Console.ReadKey();
                }
            }
        });
    
  • 输出看起来像...... 在此处输入图像描述
  • 因此,如果您真的想获取 AppPool 帐户的 EmailId,请显式选择用户并访问对象的Email属性,SPUser就像我在上面所做的那样。
于 2014-10-17T07:15:13.827 回答