我有一个问题让我有点疯狂:将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;
}
});
“新UserProfileManager”行仍然失败,“您必须具有管理用户配置文件管理员权限才能使用管理员模式”例外。
据我所知,RunWithElevatedPrivileges恢复为AppPool标识。 WindowsIdentity.GetCurrent()。Name返回“NT AUTHORITY \ network service”,我已经给了该帐户管理用户配置文件的权利 - 没有运气。
site.RootWeb.CurrentUser.LoginName为RunWithElevatedPrivileges中创建的站点返回SHAREPOINT \ system,该站点不是有效的Windows帐户ofc。
有没有办法做到这一点?我不想给所有用户“管理用户配置文件”权限,但我只想从用户配置文件(部门,国家,直接报告)中获取一些数据。有什么想法吗?
答案 0 :(得分:4)
需要设置的权限实际上位于共享服务提供商中。
我注意到您正在网络服务帐户下运行应用程序池。我在我的网站上实现了相同的功能;但是,应用程序池是在Windows帐户下托管的。不过,我不确定为什么会有所作为。
答案 1 :(得分:2)
我实际上有两种方法可以实现这一目标:
答案 2 :(得分:2)
感谢您的回答。一个警告:如果你将应用程序池作为“网络服务”而不是域帐户运行,那你就搞砸了。
但话说再说一遍,建议使用域帐户(在测试服务器上我使用网络服务,但在将其更改为域帐户之后)。
答案 3 :(得分:1)
这是答案。它是一个愚蠢的微软bug,还有一个修补程序。我现在正在下载测试它。