Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SharePoint 2010中允许UserProfileManager权限_Sharepoint_Permissions_Sharepoint 2010_Web Parts - Fatal编程技术网

在SharePoint 2010中允许UserProfileManager权限

在SharePoint 2010中允许UserProfileManager权限,sharepoint,permissions,sharepoint-2010,web-parts,Sharepoint,Permissions,Sharepoint 2010,Web Parts,我正在尝试使用UserProfileManager在自定义Web部件中显示用户列表。出于某种原因,我可以查看Web部件,所有配置文件都会输出到屏幕上(可能是因为我是管理员)。但当标准用户登录时,他们会遇到403页面 我已经对此做了一些阅读,我知道这与权限有关。这是我代码中的内容: private DataTable GetProfiles() { DataTable dtUserProfile = new DataTable(); //...DataTab

我正在尝试使用UserProfileManager在自定义Web部件中显示用户列表。出于某种原因,我可以查看Web部件,所有配置文件都会输出到屏幕上(可能是因为我是管理员)。但当标准用户登录时,他们会遇到403页面

我已经对此做了一些阅读,我知道这与权限有关。这是我代码中的内容:

private DataTable GetProfiles()
    {
        DataTable dtUserProfile = new DataTable();
        //...DataTable Columns

        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            Guid guid = SPContext.Current.Site.ID;

            using (SPSite intranet = new SPSite(guid))
            {
                SPUserToken userToken = intranet.Owner.UserToken;

                //Get current intranet context.
                SPServiceContext sContext = SPServiceContext.GetContext(intranet); 

                UserProfileManager profileManager = new UserProfileManager(sContext); 

                int totalUsers = int.Parse(profileManager.Count.ToString());

                Random random = new Random(); 

                for (int i = 0; i < NumberOfUsersToRetrieve(NoOfProfiles, totalUsers); i++)
                {
                    int randNumber = random.Next(1, totalUsers); 

                    DataRow drUserProfile; 

                    UserProfile up = profileManager.GetUserProfile(randNumber); 

                    drUserProfile = dtUserProfile.NewRow();

                    drUserProfile["DisplayName"] = up.DisplayName;
                    drUserProfile["FirstName"] = up["FirstName"].Value;
                    drUserProfile["LastName"] = up["LastName"].Value;
                    drUserProfile["Department"] = up["Department"].Value;
                    drUserProfile["ContactNumber"] = up["Office"].Value;                        
                    drUserProfile["MySiteUrl"] = up.PublicUrl;

                    dtUserProfile.Rows.Add(drUserProfile);
                }
            }
        }); 

        return dtUserProfile;
    }
private数据表GetProfiles()
{
DataTable dtUserProfile=新DataTable();
//…数据表列
SPSecurity.runWithLevelatedPrivileges(委托()
{
Guid Guid=SPContext.Current.Site.ID;
使用(SPSite内部网=新SPSite(guid))
{
SPUserToken userToken=intranet.Owner.userToken;
//获取当前intranet上下文。
SPServiceContext sContext=SPServiceContext.GetContext(内部网);
UserProfileManager=newuserprofilemanager(sContext);
int totalUsers=int.Parse(profileManager.Count.ToString());
随机=新随机();
for(int i=0;i
我的代码基本上获得了一个随机的用户集合,这取决于我想要返回的用户数量

是否可以为用户创建一个SPUserToken,该用户拥有检索用户配置文件所需的所有权限


谢谢

您是否尝试过SPSite.SystemAccount.UserToken或SPWeb.AllUsers[“user”].UserToken,而不是获取SPSite.Owner的UserToken


如果可能的话,我会使用后一种方法,即使用最小特权规则等。

而不是获取SPSite.Owner的UserToken,您是否尝试过SPSite.SystemAccount.UserToken或SPWeb.AllUsers[“user”].UserToken


如果可能的话,我会采用后一种方法,如最低特权规则等。

我知道这个问题很老,但我遇到了完全相同的问题。为了帮助原始海报和其他用户,我将原始帖子中的代码更改为:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    SPSite sc = new SPSite(SPContext.Current.Site.ID);
    SPServiceContext context = SPServiceContext.GetContext(sc);

    HttpContext currentContext = HttpContext.Current;
    HttpContext.Current = null;

    UserProfileManager profileManager = new UserProfileManager(context);

    IEnumerator profileEnum = profileManager.GetEnumerator();

    while (profileEnum.MoveNext())
    {
        UserProfile up = (UserProfile)profileEnum.Current;

        if ((up["FirstName"] != null && up["FirstName"].Value != null && !String.IsNullOrEmpty(up["FirstName"].Value.ToString()))
            && (up.PublicUrl != null && !String.IsNullOrEmpty(up.PublicUrl.ToString())))
        {
            DataRow drUserProfile;

            drUserProfile = dtUserProfile.NewRow();

            drUserProfile["DisplayName"] = up.DisplayName;
            drUserProfile["FirstName"] = up["FirstName"].Value;
            drUserProfile["LastName"] = up["LastName"].Value;
            drUserProfile["Department"] = up["Department"].Value;
            drUserProfile["Location"] = up["SPS-Location"].Value;           

            drUserProfile["MySiteUrl"] = up.PublicUrl.ToString().Replace(@"\", @"&#92;");

            dtUserProfile.Rows.Add(drUserProfile);
        }
    }
}

HttpContext.Current = currentContext;

希望这段代码能够解决这个错误。

我知道这个问题很老,但我遇到了完全相同的问题。为了帮助原始海报和其他用户,我将原始帖子中的代码更改为:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    SPSite sc = new SPSite(SPContext.Current.Site.ID);
    SPServiceContext context = SPServiceContext.GetContext(sc);

    HttpContext currentContext = HttpContext.Current;
    HttpContext.Current = null;

    UserProfileManager profileManager = new UserProfileManager(context);

    IEnumerator profileEnum = profileManager.GetEnumerator();

    while (profileEnum.MoveNext())
    {
        UserProfile up = (UserProfile)profileEnum.Current;

        if ((up["FirstName"] != null && up["FirstName"].Value != null && !String.IsNullOrEmpty(up["FirstName"].Value.ToString()))
            && (up.PublicUrl != null && !String.IsNullOrEmpty(up.PublicUrl.ToString())))
        {
            DataRow drUserProfile;

            drUserProfile = dtUserProfile.NewRow();

            drUserProfile["DisplayName"] = up.DisplayName;
            drUserProfile["FirstName"] = up["FirstName"].Value;
            drUserProfile["LastName"] = up["LastName"].Value;
            drUserProfile["Department"] = up["Department"].Value;
            drUserProfile["Location"] = up["SPS-Location"].Value;           

            drUserProfile["MySiteUrl"] = up.PublicUrl.ToString().Replace(@"\", @"&#92;");

            dtUserProfile.Rows.Add(drUserProfile);
        }
    }
}

HttpContext.Current = currentContext;

希望这段代码能够解决这个错误。

所以我应该用“SPUserToken userToken=intranet.Owner.userToken;”替换“SPUserToken userToken=SPWeb.AllUsers[“user”].userToken;”?“用户”是具有管理权限的用户吗?更准确地说,是SPUserToken userToken=intranet.OpenWeb().AllUsers。[“用户”].userToken-是的,“用户”是具有所需权限的用户。因此,我要将“SPUserToken userToken=intranet.Owner.userToken;”替换为“SPUserToken userToken=SPWeb.AllUserToken[“用户”].userToken;”?“用户”是具有管理员权限的用户吗?更准确地说,是SPUserToken userToken=intranet.OpenWeb().AllUsers。[“用户”].userToken-是的,“用户”是具有所需权限的用户。谢谢您的回复。我实际上使用了类似的方法,添加了HttpContext currentContext=HttpContext.Current;HttpContext.Current=null;如果网站上允许匿名用户,这将不起作用。谢谢您的回复。我实际上使用了类似的方法,添加了HttpContext currentContext=HttpContext.Current;HttpContext.Current=null;如果站点上允许匿名用户,则此操作将不起作用。