我有一个让我有点抓狂的问题:使用 UserProfileManager 作为非授权用户。
问题:用户没有“管理用户配置文件”权限,但我仍然想使用 UserProfileManager。使用 SPSecurity.RunWithElevatedPrivileges 的想法似乎不起作用,因为 UserProfileManager 似乎授权了 SSP。
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(inputWeb.Site.ID))
{
ServerContext ctx = ServerContext.GetContext(site);
UserProfileManager upm = new UserProfileManager(ctx,true);
UserProfile u = upm.GetUserProfile(userLogin);
DepartmentName = u["Department"].Value as string;
}
});
这在“new UserProfileManager”行上仍然失败,“您必须具有管理用户配置文件管理员权限才能使用管理员模式”例外。
就我用户而言,RunWithElevatedPrivileges 恢复为 AppPool 身份。WindowsIdentity.GetCurrent().Name 返回“NT AUTHORITY\network service”,并且我已授予该帐户“管理用户配置文件”权限 - 不走运。
site.RootWeb.CurrentUser.LoginName 为在 RunWithElevatedPrivileges 中创建的站点返回 SHAREPOINT\system,该站点不是有效的 Windows 帐户。
有没有办法做到这一点?我不想给所有用户“管理用户配置文件”的权限,但我只想从用户配置文件(部门、国家、直接报告)中获取一些数据。有任何想法吗?