繁体   English   中英

SharePoint开发权限

[英]SharePoint Development Permissions

嗨,我正在使用SharePoint名称空间从整个网站的各种列表中提取项目。 我的Web部件有效,但仅对我的帐户有效。 当我在另一个帐户上尝试时,该页面显示“错误:访问被拒绝”。 我已取出所有Web部件,并且页面上仅此Web部件。 当我删除以下几行时,该页面将为所有人加载,但是当我将其重新添加时却无法正常工作。 我猜这是一些权限问题。 我想知道是否可以通过分配要使用的用户ID来以编程方式在SharePoint上查询其他列表? 感谢您的任何帮助

...
SPSite site = new SPSite(_SPSite);           
SPWeb eachWeb = site.AllWebs[0];
SPListItemCollection myItemCollection = eachWeb.Lists["Listings"].Items;
...

没错,当您使用的帐户无权访问当前网站中的“列表”列表时,就会发生拒绝访问错误。

解决此问题的最简单方法是使用SPSecurity.RunWithElevatedPrivleges调用:

SPSecurity.RunWithElevatedPrivleges(delegate()
{
     //Your code here
});

它将使用SharePoint / System帐户运行匿名方法中包含的任何代码,从而授予完全控制权。 但是,使用此技术时要小心,因为它等效于以超级用户帐户完全信任地运行代码。 还有其他 注意事项

尝试:

SPWeb eachWeb = SPContext.Current.Site.RootWeb.Webs[0];
SPListItemCollection myItemCollection = eachWeb.Lists["Listings"].Items;

请记住,SPWeb应该在using块中using ,或在使用后显式处置。

关于EvilGoatBob的第一个警告,我引用:

“如果要在提升的方法中操作任何对象模型元素,则需要在此调用内获取新的SPSite引用。例如

SPSecurity.RunWithElevatedPrivileges(delegate(){
   SPSite mySite = new SPSite(http://sharepoint/);
   SPWeb myWeb = SPSite.OpenWeb();
   // further implementation omitted
});"

请注意,site参数是硬编码的-这是由于一个错误。 如果您改为尝试:

使用(SPSite站点=新的SPSite(“ http://” + System.Environment.MachineName)){}

您将收到相当普通的“指定的URL处不存在SharePoint网站...”错误。 这没有让我悲伤。 最重要的是,您必须对服务器名称进行硬编码(除非任何人都有其他选择)。 当首次使用VSeWSS 1.3调试Web部件时,您还会收到类似的错误消息。

不需要在这种情况下,硬编码服务器名称,因为您的要求是检索同一站点作为您的WebPart内从列表中的项目。 您是正确的,如果您的帐户没有足够的特权,那么您将获得拒绝访问权限。 解决方案是在不同的安全上下文中创建一个新的SPSite对象,然后执行您的工作:

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(SPContext.Current.Site.Url))
        {
            using (SPWeb web = site.OpenWeb())
            {
                //the web object was retrieved with elevated privileges under the system account.

                //do your work here:
                SPListItemCollection myItemCollection = web.Lists["Listings"].Items;

                //...
            }
        }
    }
    );

使用上面的代码,您的webpart可移植,因为没有硬编码,并且在正确的安全上下文中运行,同时处理了由SPSite和SPWeb构造函数创建的所有非托管SPRequest对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM