2008-09-17 66 views
4

我有一個問題,促使我有點堅果:使用UserProfileManager作爲非授權用戶。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」,並且我給了那個帳號Manage User Profiles權限 - 沒有運氣。

site.RootWeb.CurrentUser.LoginName返回在RunWithElevatedPrivileges內創建的站點的SHAREPOINT \ system,該站點不是有效的Windows帳戶ofc。

有甚至有辦法做到這一點?我不想給所有用戶「管理用戶配置文件」權限,但我只想從用戶配置文件(部門,國家,直接報告)獲取一些數據。有任何想法嗎?

回答

4

需要設置的權限實際上可以在共享服務提供程序中找到。

  1. 導航到中央管理
  2. 瀏覽到共享服務提供
  3. 用戶配置文件和我的網站導航到個性化服務的權限。
  4. 如果該帳戶尚不存在,請添加您的網站App Domain所運行的帳戶。
  5. 授予該用戶管理用戶配置文件權限。

我注意到您正在網絡服務帳戶下運行應用程序池。我在我的網站上實施了相同的功能;但是,應用程序池託管在Windows帳戶下。但我不確定爲什麼這會有所作爲。

+0

這似乎不適用於網絡服務。在週末,我會嘗試它是否適用於域帳戶。無論如何推薦使用域帳戶AFAIK,但我的開發機器是獨立的服務器。 – 2008-09-18 08:38:30

+0

有趣。本週末之後,我會回頭看看這個帖子。如果它仍然不起作用,請給我另一條評論,我會看看我能挖掘出什麼。你的代碼看起來很好,我知道這是有效的,因爲我過去做過。 – senfo 2008-09-19 02:01:04

2

感謝您的答案。一個注意事項:如果您將應用程序池作爲「網絡服務」而不是域帳戶運行,那麼就搞砸了。

但是,再次推薦使用域帳戶(在我使用網絡服務的測試服務器上,但在將其更改爲域帳戶後)。

+0

是的,這就是我在嘗試將模擬恢復到NETWORK SERVICE一天後創建用戶配置文件屬性後所達到的目的,它全部以本地方法結束,但不會授予您權限。 – axk 2008-10-30 14:45:02

相關問題