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 ID に戻ります。WindowsIdentity.GetCurrent().Name は "NT AUTHORITY\network service" を返し、そのアカウントにユーザー プロファイルの管理権限を与えましたが、うまくいきませんでした。
site.RootWeb.CurrentUser.LoginName は、RunWithElevatedPrivileges 内で作成されたサイトの SHAREPOINT\system を返します。これは c の有効な Windows アカウントではありません。
それを行う方法さえありますか?すべてのユーザーに「ユーザー プロファイルの管理」権限を付与したくはありませんが、ユーザー プロファイル (部門、国、直属の部下) からデータを取得したいだけです。何か案は?