我以系统帐户登录,所以它可能不是“真正的访问被拒绝”!我所做的: - 自定义母版页 - 自定义内容类型的自定义页面布局(带有自定义字段)
如果我在页面布局中添加自定义字段(在 SPD 中的工具中也称为“内容字段”),当我尝试编辑来自该页面布局的页面时,我会收到拒绝访问。
因此,例如,如果我在页面布局中将这一行添加到“asp:content”标签中:我会收到拒绝访问。如果我删除它,一切都很好。(字段“test”是来自内容类型的字段)。
任何想法?
更新
好吧,我在一个空白网站上尝试过,它运行良好,所以我的 Web 应用程序一定有问题:(
更新#2
看起来母版页中的这一行给了我拒绝访问:
<SharePoint:DelegateControl runat="server" ControlId="PublishingConsole" Visible="false"
PrefixHtml="<tr><td colspan="0" id="mpdmconsole" class="s2i-consolemptablerow">"
SuffixHtml="</td></tr>"></SharePoint:DelegateControl>
更新#3
看起来像一个类似的问题。但我们的 Sharepoint 版本具有最新更新。我将尝试使用应该修复列表并发布另一个更新的代码。
** 更新 #4**
好的...我尝试了在上面页面上找到的代码(请参阅链接),它似乎解决了这个问题。我还没有以 100% 的速度测试该解决方案,但到目前为止,一切都很好。这是我为功能接收器制作的代码(我使用了上面链接中发布的代码):
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Xml;
namespace MyWebsite.FixAccessDenied
{
class FixAccessDenied : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
FixWebField(SPContext.Current.Web);
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void FeatureInstalled(SPFeatureReceiverProperties properties)
{
//throw new Exception("The method or operation is not implemented.");
}
public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
{
//throw new Exception("The method or operation is not implemented.");
}
static void FixWebField(SPWeb currentWeb)
{
string RenderXMLPattenAttribute = "RenderXMLUsingPattern";
SPSite site = new SPSite(currentWeb.Url);
SPWeb web = site.OpenWeb();
web.AllowUnsafeUpdates = true;
web.Update();
SPField f = web.Fields.GetFieldByInternalName("PermMask");
string s = f.SchemaXml;
Console.WriteLine("schemaXml before: " + s);
XmlDocument xd = new XmlDocument();
xd.LoadXml(s);
XmlElement xe = xd.DocumentElement;
if (xe.Attributes[RenderXMLPattenAttribute] == null)
{
XmlAttribute attr = xd.CreateAttribute(RenderXMLPattenAttribute);
attr.Value = "TRUE";
xe.Attributes.Append(attr);
}
string strXml = xe.OuterXml;
Console.WriteLine("schemaXml after: " + strXml);
f.SchemaXml = strXml;
foreach (SPWeb sites in site.AllWebs)
{
FixField(sites.Url);
}
}
static void FixField(string weburl)
{
string RenderXMLPattenAttribute = "RenderXMLUsingPattern";
SPSite site = new SPSite(weburl);
SPWeb web = site.OpenWeb();
web.AllowUnsafeUpdates = true;
web.Update();
System.Collections.Generic.IList<Guid> guidArrayList = new System.Collections.Generic.List<Guid>();
foreach (SPList list in web.Lists)
{
guidArrayList.Add(list.ID);
}
foreach (Guid guid in guidArrayList)
{
SPList list = web.Lists[guid];
SPField f = list.Fields.GetFieldByInternalName("PermMask");
string s = f.SchemaXml;
Console.WriteLine("schemaXml before: " + s);
XmlDocument xd = new XmlDocument();
xd.LoadXml(s);
XmlElement xe = xd.DocumentElement;
if (xe.Attributes[RenderXMLPattenAttribute] == null)
{
XmlAttribute attr = xd.CreateAttribute(RenderXMLPattenAttribute);
attr.Value = "TRUE";
xe.Attributes.Append(attr);
}
string strXml = xe.OuterXml;
Console.WriteLine("schemaXml after: " + strXml);
f.SchemaXml = strXml;
}
}
}
}
只需将该代码作为功能接收器,并在根站点激活它,它应该循环遍历所有子站点并修复列表。
概括
编辑PAGE或ITEM时收到ACCESS DENIED
即使您以 f****in 世界的超级管理员身份登录,您仍然会收到错误消息(对不起,我在那个错误上花了 3 天时间)
对我来说,它发生在从另一个站点定义(cmp 文件)导入之后
实际上,它应该是一个已知的错误,应该从 2009 年 2 月开始修复,但看起来不是。
我上面发布的代码应该可以解决这个问题。