没有管理用户配置文件的Sharepoint UserProfileManager权限

我有一个问题让我有点疯狂:使用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 Identity。 WindowsIdentity.GetCurrent()。Name返回“NT AUTHORITY \ network service”,我已经给了该帐户管理用户配置文件的权利 – 没有运气。

site.RootWeb.CurrentUser.LoginName为RunWithElevatedPrivileges中创建的站点返回SHAREPOINT \ system,该站点不是有效的Windows帐户ofc。

有没有办法做到这一点? 我不想给所有用户“管理用户配置文件”权限,但我只想从用户配置文件(部门,国家,直接报告)中获取一些数据。 有任何想法吗?

需要设置的权限实际上在共享服务提供程序中找到。

  1. 导航到中央管理员
  2. 导航到共享服务提供商
  3. 在“ 用户配置文件和我的网站”下,导航到“个性化服务”权限
  4. 如果该帐户尚不存在,请添加运行您的网站App Domain的帐户。
  5. 授予该用户管理用户配置文件权限。

我注意到您正在网络服务帐户下运行应用程序池。 我在我的网站上实现了相同的function; 但是,应用程序池是在Windows帐户下托管的。 但是,我不确定为什么会有所作为。

我实际上有两种方法可以实现这一目标:

  1. 将使用UserProfileManager的代码放在Web服务层后面。 Web服务应使用可以访问User Profile Service的应用程序池标识。
  2. 使用以下文章中描述的模拟技术: http : //www.dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128890.aspx

谢谢你的答案。 一个警告:如果您将应用程序池作为“网络服务”而不是域帐户运行,那么您就搞砸了。

但话说再说一遍,建议使用域帐户(在测试服务器上我使用网络服务,但在将其更改为域帐户之后)。

这是答案。 它是一个愚蠢的微软bug,还有一个修补程序。 我现在正在下载测试它。

http://support.microsoft.com/kb/952294/en-us