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

时间:2020-03-05 18:58:45  来源:igfitidea点击:

我有一个让我有点生气的问题:使用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(不是有效的Windows帐户)中创建的站点的SHAREPOINT \ system。

有没有办法做到这一点?我不想授予所有用户"管理用户个人资料"的权限,但是我只想从用户个人资料(部门,国家/地区,直接报告)中获取一些数据。有任何想法吗?

解决方案

回答

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

  • 导航到中央管理
  • 导航到共享服务提供商
  • 在"用户配置文件"和"我的网站"下,导航到"个性化服务权限"。
  • 如果该帐户尚不存在,请添加为其运行App Domain的网站的帐户。
  • 授予该用户"管理用户个人资料"权限。

我注意到我们正在网络服务帐户下运行应用程序池。我在自己的网站上实现了相同的功能;但是,应用程序池托管在Windows帐户下。我不知道为什么这会有所作为。

回答

我实际上设法完成了两种方法:

  • 将使用UserProfileManager的代码放在Web服务层后面。 Web服务应使用有权访问用户配置文件服务的应用程序池标识。
  • 使用下面的文章中描述的模拟技术:http://www.dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128890.aspx

回答

感谢答案。一个警告:如果我们将应用程序池作为"网络服务"而不是域帐户来运行,那么我们将陷入困境。

但是再一次,建议仍然使用域帐户(在测试服务器上,我使用了网络服务,但是将其更改为域帐户后,它可以工作)。

回答

这就是答案。它是一个愚蠢的Microsoft错误,并且有一个修复程序。我正在下载进行测试。

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