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

时间:2008-09-17 12:50:36

标签: c# sharepoint

我有一个问题让我有点疯狂:将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。

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

4 个答案:

答案 0 :(得分:4)

需要设置的权限实际上位于共享服务提供商中。

  1. 导航至中央管理员
  2. 导航至共享服务提供商
  3. 用户个人资料和我的网站下,导航至个性化服务权限。
  4. 如果该帐户尚不存在,请添加运行您的网站App Domain的帐户。
  5. 授予该用户管理用户个人资料权限。
  6. 我注意到您正在网络服务帐户下运行应用程序池。我在我的网站上实现了相同的功能;但是,应用程序池是在Windows帐户下托管的。不过,我不确定为什么会有所作为。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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