没有管理用户配置文件的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。
有没有办法做到这一点? 我不想给所有用户“管理用户配置文件”权限,但我只想从用户配置文件(部门,国家,直接报告)中获取一些数据。 有任何想法吗?
需要设置的权限实际上在共享服务提供程序中找到。
- 导航到中央管理员
- 导航到共享服务提供商
- 在“ 用户配置文件和我的网站”下,导航到“个性化服务”权限
- 如果该帐户尚不存在,请添加运行您的网站App Domain的帐户。
- 授予该用户管理用户配置文件权限。
我注意到您正在网络服务帐户下运行应用程序池。 我在我的网站上实现了相同的function; 但是,应用程序池是在Windows帐户下托管的。 但是,我不确定为什么会有所作为。
我实际上有两种方法可以实现这一目标:
- 将使用UserProfileManager的代码放在Web服务层后面。 Web服务应使用可以访问User Profile Service的应用程序池标识。
- 使用以下文章中描述的模拟技术: http : //www.dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128890.aspx
谢谢你的答案。 一个警告:如果您将应用程序池作为“网络服务”而不是域帐户运行,那么您就搞砸了。
但话说再说一遍,建议使用域帐户(在测试服务器上我使用网络服务,但在将其更改为域帐户之后)。
这是答案。 它是一个愚蠢的微软bug,还有一个修补程序。 我现在正在下载测试它。