Sharepoint: доступ запрещен при редактировании страницы (из-за разметки страницы) или элемента списка - PullRequest
0 голосов
/ 14 января 2010

Я вошел в систему как системная учетная запись, поэтому, вероятно, это не «реальный доступ запрещен»! Что я сделал : - Пользовательская главная страница - Пользовательский макет страницы из пользовательского типа контента (с настраиваемыми полями)

Если я добавлю настраиваемое поле (так называемое «поле содержимого» в инструментах в SPD) в макет моей страницы, мне будет отказано в доступе, когда я попытаюсь изменить страницу, исходящую из этого макета страницы.

Так, например, если я добавлю в свой макет страницы эту строку в теге "asp: content": Я получил отказано в доступе. Если я уберу это, все в порядке. (поле «тест» является полем, которое происходит от типа контента).

Есть идеи?

UPDATE

Ну, я пробовал на пустом сайте, и он работал нормально, поэтому, должно быть, что-то не так с моим веб-приложением: (

ОБНОВЛЕНИЕ № 2

Похоже, что эта строка на главной странице дает мне доступ запрещен:

<SharePoint:DelegateControl runat="server" ControlId="PublishingConsole" Visible="false"
    PrefixHtml="&lt;tr&gt;&lt;td colspan=&quot;0&quot; id=&quot;mpdmconsole&quot; class=&quot;s2i-consolemptablerow&quot;&gt;"
    SuffixHtml="&lt;/td&gt;&lt;/tr&gt;"></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 года, но похоже, что это не так.

Код, который я разместил выше, должен это исправить.

Ответы [ 4 ]

0 голосов
/ 22 мая 2010

Проблема, по-видимому, вызвана ошибкой в ​​функции stsadm -o export в некоторых версиях SharePoint (я получил ее при экспорте с сервера RTM MOSS 2007 года). При импорте фиктивного файла экспорта возникает проблема «edit-denied-access» во всех недавно созданных списках. Исправления для более поздней версии от Microsoft исправляют stsadm -o export, но НЕ ИСПРАВЛЯЮТ поврежденные списки; для этого требуется процедура типа tinky05 .

0 голосов
/ 15 января 2010

Некоторые идеи:

  • Проверьте, не зарегистрированы ли какие-либо веб-части в пользовательском макете страницы и главной странице как безопасные.
  • Определили ли вы свой собственный тип настраиваемого поля, например, написать класс, расширяющий SPField? Если да, то используете ли вы собственный элемент управления полем? Если да, проверьте, выполняет ли он что-либо, для чего могут потребоваться повышенные привилегии.
  • Аналогично, проверьте, нет ли панелей режима редактирования, содержащих веб-части веб-элементов управления, которые могут пытаться сделать что-то, что требует повышенных привилегий.
0 голосов
/ 20 января 2010

Смотрите код, который я разместил в редактировании поста. Это исправило мою проблему.

0 голосов
/ 14 января 2010

Попробуйте опубликовать свои MasterPage и Page Layouts, это самая распространенная причина. Поскольку системная учетная запись является godmode, она не получит эту ошибку.

В SharePoint Designer вы не можете сделать последний шаг в рабочем процессе публикации (Утверждение), поэтому вы:

SharePoint Designer:
CheckIn => Опубликовать основную версию, нажмите кнопку OK или перейдите на / _catalogs / masterpage на сайте.

Затем и используйте контекстное меню для утверждения главной страницы и макетов.

...