разрешения, препятствующие правильной работе UpdateListItems с использованием SPServices - PullRequest
0 голосов
/ 29 февраля 2012

Я написал код для пунктов списка заезда / выезда. Он отлично работает с администраторами, но любой другой уровень разрешений имеет проблемы, 401 несанкционированная ошибка с UpdateListItems на "_vti_bin / lists.asmx" для сайта. Я подтвердил, что пользователи могут просматривать веб-сервис "_vti_bin / lists.asmx".

     //declare variables used for check-in/check-out.
  var varName;
  var varChecked;
  var varID
  var varQueryStringVals;
  //Check who has checked out the item
  function getCheckOutPerson (){
$().SPServices({
    operation: "GetListItems",
    async: false,
    listName: "Communications Services Request Form",
    CAMLQuery: "<Query><Where><Eq><FieldRef Name='ID' /><Value Type='Number'>" + varID + "</Value></Eq></Where></Query>",
    completefunc: function (xData, Status) {
      $(xData.responseXML).SPFilterNode("z:row").each(function() {
        varChecked = $(this).attr("ows_CheckedOutTo");
      });
    }
  });
  };

$(document).ready(function() {
//Check-in if edits cancelled
    $("#cancelBtn").click(function(){
      //Check in edited item.
      if (varName == varChecked){
    $().SPServices({
        operation: "UpdateListItems",
        async: false,
        debug: true,
        listName: "Communications Services Request Form",
        ID: varID,
        valuepairs: [["CheckedOutTo", ""]],
        completefunc: function(xData, Status) {}
    });
    };
    });
 //get current user 
  varName = $().SPServices.SPGetCurrentUser({
    fieldName: "Title",
    debug: false
});
//get current list item ID
varQueryStringVals = $().SPServices.SPGetQueryString();
varID = varQueryStringVals["ID"];
     //get checked out name
  getCheckOutPerson();
  // item checked in or checked out by current user?
    if (varChecked == undefined || varName == varChecked){
//check out item
    $().SPServices({
        operation: "UpdateListItems",
        async: false,
        debug: true,
        listName: "Communications Services Request Form",
        ID: varID,
        valuepairs: [["CheckedOutTo", varName]],
        completefunc: function(xData, Status) {
        }
    });
};
//checked out message
if (varChecked != undefined && varName != varChecked) {
alert ("You cannot edit this item. It is check out by " + varChecked +".");
history.back();
}; 
//Display 'checked out to' in dispitem.aspx
getCheckOutPerson();
  if ($('.CheckedOut').text('')) {
    $('.CheckedOut').append(varChecked);
  }
  });

 function PreSaveAction() {
 if (varName != varChecked){
alert ("You cannot make changes to this item. It it checked out to " + varChecked);
return false;
};
        //Check in edited item.
    $().SPServices({
        operation: "UpdateListItems",
        async: false,
        debug: true,
        listName: "Communications Services Request Form",
        ID: varID,
        valuepairs: [["CheckedOutTo", ""]],
        completefunc: function(xData, Status) {}
    });
    return true;
 };

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Оказывается, это не имеет ничего общего с тем, что я там опубликовал.Иерархия разрешений испорчена, поэтому пользователям на сайтах более высокого уровня даются разрешения на чтение, когда я пытаюсь предоставить им разрешения для добавления на уровне списка, а разрешения на уровне списка игнорируются.

0 голосов
/ 29 февраля 2012

Имеют ли пользователи без прав администратора достаточные разрешения?Только чтение не будет достаточным для отъезда / регистрации.

Вы используете разрешения уровня элемента?http://www.novolocus.com/2009/05/08/updatelistitems-web-service-fails-when-using-item-level-permissions/

Мне удалось получить рабочий пример с использованием lists.asmx UndoCheckOut.Тестирование прошло с пользователем, у которого есть администратор / владелец, и с другим, который только что внес свой вклад.DocUrl должен быть полным URL-адресом элемента (например, - http://server/site/list/item.txt). Обратите внимание, SOAPAction в заголовке (см. Ян Тиелен - http://weblogs.asp.net/jan/archive/2009/05/25/quot-the-security-validation-for-this-page-is-invalid-quot-when-calling-the-sharepoint-web-services.aspx).

function UndoCheckout(docUrl){
    var soapEnv =
        "<?xml version='1.0' encoding='utf-8'?> \
            <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \
                <soap:Body> \
                    <UndoCheckOut xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                        <pageUrl>"+ docUrl +"</pageUrl> \
                    </UndoCheckOut> \
                </soap:Body> \
            </soap:Envelope>";
$.ajax({
    url: "http://server/mysite/_vti_bin/lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        contentType: "text/xml; charset=\"utf-8\"",
        beforeSend: function(xhr) {
            xhr.setRequestHeader("SOAPAction",
            "http://schemas.microsoft.com/sharepoint/soap/UndoCheckOut");
        },
        complete: function(xData, status){
            var result = $(xData.responseXML).find("UndoCheckOutResult").text();
            if (result == "true") alert("Undo checkout succeeded.");
        },
        error: function(){
            alert("error");
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...