[英]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;
...
尝试:
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.