Самый простой и быстрый способ кастомизации форм списков SharePoint – это метод с применением веб-части «Редактор содержимого» (CEWP – Content editor web part), в которую нужно добавить ссылку на html-файл с кодом.

Для одной задачи требовалось запретить возможность редактировать запись ее авторам. Создать можно, а изменить нельзя. При этом, установить разрешения, которые запрещали бы редактирование, было невозможно.

Для того, чтобы авторы записи ничего не изменили после создания, вариант удаления страницы EditForm.aspx не подходил. Потому было выбрано простое решение – скрывать кнопку «Изменить элемент» для авторов записи.

Само по себе скрытие кнопки – одна строка при условии наличия jQuery:
$("a[aria-describedby^='Ribbon.ListForm.Display.Manage.EditItem_ToolTip']").css({'display' : 'none'})

Скрытая кнопка Изменить элемент
Скрытая кнопка Изменить элемент

Ниже привожу полноценный код, который был вставлен на страницу. Он определяет имя текущего пользователя и сравнивает его с автором записи элемента списка. Если значения равны, то кнопку скрываем. Для работы скрипта необходимо подключить SPServices

<script>
//Функция для парсинга URL и Query String
function getURLParam(key,target){
    var values = [];
    if (!target) target = location.href;
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var pattern = key + '=([^&#]+)';
    var o_reg = new RegExp(pattern,'g');
    while (true){
        var matches = o_reg.exec(target);
        if (matches && matches[1]){
            values.push(matches[1]);
        } else {
            break;
        }
    }
    if (!values.length){
        return null;   
    } else {
        return values.length == 1 ? values[0] : values;
    }
}


	$(document).ready(function() {
		//Определяем строку запроса
		var queryString = location.search;
		//Получаем значение ID записи списка из URL
		var idstr = getURLParam ('ID', queryString);
		//Получаем значение автора записи из функции ниже
		var author = GetListItemAuthor(idstr);
		//Формат имени автора "33;#Имя автора". Преобразуем
		var a = author.replace(/\d{1,};#/, '');
		//Получаем имя текущего пользователя
		thisUserAccount= $().SPServices.SPGetCurrentUser({
		fieldNames: ["Title", "Name"],
		debug: false
		});
		if(thisUserAccount) {
			var login = thisUserAccount.Name;
			var userName = login.split("\");
			if(thisUserAccount.Title == a) {
				$("a[aria-describedby^='Ribbon.ListForm.Display.Manage.EditItem_ToolTip']").css({'display' : 'none'})
			}			
		}
	});
	
	
function GetListItemAuthor(strid) {
	myQuery = "<Query><Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>" + strid + "</Value></Eq></Where></Query>";
	var itemAuthor;
	  $().SPServices({
		operation: "GetListItems",
		async: false,
		listName: "nameoflist",
		CAMLViewFields: "<ViewFields><FieldRef Name='Title' /><FieldRef Name='Author' /></ViewFields>",
		CAMLQuery: myQuery,
		completefunc: function (xData, Status) {
		  $(xData.responseXML).SPFilterNode("z:row").each(function() {
			itemAuthor = $(this).attr("ows_Author");
		  });
		}
	  });
	  return itemAuthor;
}
</script>