Я вошел в систему как системная учетная запись, поэтому, вероятно, это не «реальный доступ запрещен»!
Что я сделал :
- Пользовательская главная страница
- Пользовательский макет страницы из пользовательского типа контента (с настраиваемыми полями)
Если я добавлю настраиваемое поле (так называемое «поле содержимого» в инструментах в SPD) в макет моей страницы, мне будет отказано в доступе, когда я попытаюсь изменить страницу, исходящую из этого макета страницы.
Так, например, если я добавлю в свой макет страницы эту строку в теге "asp: content":
Я получил отказано в доступе. Если я уберу это, все в порядке. (поле «тест» является полем, которое происходит от типа контента).
Есть идеи?
UPDATE
Ну, я пробовал на пустом сайте, и он работал нормально, поэтому, должно быть, что-то не так с моим веб-приложением: (
ОБНОВЛЕНИЕ № 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
Я нашел http://odole.wordpress.com/2009/01/30/access-denied-error-message-while-editing-properties-of-any-document-in-a-moss-document-library/
Похоже, похожая проблема. Но наши версии 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;
}
}
}
}
Просто поместите этот код как Feature Receiver и активируйте его на корневом сайте, он должен пройти через все дочерние сайты и исправить списки.
РЕЗЮМЕ
При редактировании PAGE или ITEM
вы получаете
ACCESS DENIED
Вы по-прежнему получаете сообщение об ошибке, даже если вы вошли в систему как Супер Администратор f **** в мире (извините, я потратил 3 дня на эту ошибку)
Для меня это произошло после импорта с другого сайта определения (файл cmp)
На самом деле, это предполагаемая ошибка, и она должна быть исправлена с февраля 2009 года, но похоже, что это не так.
Код, который я разместил выше, должен это исправить.