Необходимо увидеть, является ли текущий пользователь тем же пользователем, который создал редактируемую запись - PullRequest
0 голосов
/ 15 октября 2019

У меня есть процесс запроса (настраиваемый список) в SharePoint, в котором необходимо реализовать некоторые бизнес-правила. Первое правило: только текущий пользователь может редактировать запись вместе с некоторыми администраторами. Проблема с использованием OOB « Создание и редактирование доступа » заключается в том, что, когда пользователь редактирует запись, которая не принадлежит ему, SharePoint не предупреждает их, пока они не предпримут попытку сохранения. Слишком поздно сообщать пользователю эту новость, поэтому мне нужно обеспечить собственную безопасность, чтобы пользователю не разрешалось редактировать.

Мой код для получения текущего пользователя:

function SetCurrentUsernameToPeoplePicker()
{
  var ctx = new SP.ClientContext.get_current();
  this.website = ctx.get_web();
  this.currentUser = website.get_currentUser();
  ctx.load(currentUser);
  ctx.executeQueryAsync(Function.createDelegate(this, this.defaultUserSuccess), 
  Function.createDelegate(this, this. defaultUserFail));
}

function defaultUserSuccess (sender, args)
{
  var loginName = currentUser.get_loginName();
  console.log('login='+loginName );
}

Я не мог понять, как получить пользователя из средства выбора людей по имени запрашивающего на экране, поэтому я попытался использовать запрос CAMEL, чтобы получить его. У меня есть объект, но я не могу получить логин для сравнения. У меня есть следующий код:

 function retrieveListItems() {
    var clientContext = new SP.ClientContext.get_current();
    var oList = clientContext.get_web().get_lists().getByTitle('BSMRequests');
    var recordId = "14";
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ID\'/><Value Type=\'Text\'>'+ recordId +'</Value></Eq></Where></Query></View>'); 
    collListItem = oList.getItems(camlQuery);
    clientContext.load(collListItem);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded),
                                                           Function.createDelegate(this, this.onQueryFailed));
  }

  function onQuerySucceeded(sender, args) {
    var listItemEnumerator = collListItem.getEnumerator();
    while (listItemEnumerator.moveNext()) {
      var oListItem = listItemEnumerator.get_current();
    console.log('requestor='+oListItem.get_item('Requestor_x0020_Name'));
    }
  }

Мне нужен либо способ получить LoginName для поля Имя запрашивающего для этой записи, либо другое средство сравнения текущего пользователя с именем пользователя, создавшего эту запись. Есть предложения?

1 Ответ

0 голосов
/ 16 октября 2019

Если я правильно вас понимаю, Requestor_x0020_Name является полем пользователя.

JSOM возвращает oListItem.get_item ('Requestor_x0020_Name') в виде объекта SP.FieldUserValue, вы можете получить идентификатор пользователя по oListItem.get_item('Requestor_x0020_Name').get_lookupId() или имени пользователяoListItem.get_item('Requestor_x0020_Name').get_lookupValue().

В этом случае, я думаю, вы могли бы сравнить идентификатор пользователя.

...