在Visual Web Part SharePoint 2010中使用Profile Manager获取用户配置文件

时间:2016-03-14 19:16:46

标签: sharepoint sharepoint-2010

我收到错误"访问被拒绝:只有管理员可以检索所有用户的计数。"虽然我正在使用SPSecurity.RunwithElevatedPrivileges 我错过了什么?请帮忙。

 private UserProfile GetUserInfo(string AccountName)
   {
       UserProfile profile = null;

       SPSecurity.RunWithElevatedPrivileges(delegate()
                {


                    SPServiceContext serviceContext = SPServiceContext.Current;
                    UserProfileManager profileManager = new UserProfileManager(serviceContext);
                    if (AccountName != string.Empty)
                    {
                        if (profileManager.UserExists(AccountName))
                        {

                            profile = profileManager.GetUserProfile(AccountName);
                        }
                    }
                    //else
                    //{
                    //    profile = profileManager.GetUserProfile(SPContext.Current.Web.CurrentUser.RawSid);
                    //}
                });
       return profile;
   }

2 个答案:

答案 0 :(得分:0)

我可以借助以下代码

检索用户个人资料
 SPSecurity.RunWithElevatedPrivileges( 
                delegate() 
                { 
                    using (SPSite thisSite = new SPSite(SPContext.Current.Site.Url)) 
                    { 
                        HttpContext tmp = HttpContext.Current; 
                        HttpContext.Current = null; 
                        SPServiceContext serviceContext = SPServiceContext.GetContext(thisSite); 
                        UserProfileManager mgr = new UserProfileManager(serviceContext, true); 
                        users.Text += "The total number of user profiles available:  " + mgr.Count;                                
                        HttpContext.Current = tmp; 
                    } 
                } 
            );

来源:http://weblogs.asp.net/sreejukg/access-denied-error-when-retrieving-user-profiles-count-from-sharepoint

答案 1 :(得分:0)

是的,你需要生成一个新的上下文。 在您的旧代码中:

SPServiceContext serviceContext = SPServiceContext.Current;
UserProfileManager profileManager = new UserProfileManager(serviceContext);

您使用当前上下文生成新的UPM,因此 RunWithElevatedPrivileges 是无用的。

在你的新代码中:

SPSecurity.RunWithElevatedPrivileges(delegate() 
{
 using (SPSite thisSite = new SPSite(SPContext.Current.Site.Url)) 
 {
   [...]
   SPServiceContext serviceContext = SPServiceContext.GetContext(thisSite); 
   UserProfileManager mgr = new UserProfileManager(serviceContext, true); 

你得到一个新的Eleveted上下文(因为你在ElevatedPrivileges中实例化一个新的SPSite),这就是为什么你现在可以使用UPM