Создать элемент SharePoint с текущим логином пользователя csom - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть веб-сервис, в котором механизм аутентификации настроен на аутентификацию Windows (NTLM). Из этого веб-сервиса я создаю / обновляю элементы в списке SharePoint. Я хочу создать / обновить элемент с текущим вошедшим пользователем. Ниже мой блок кода.

public string InsertItem(string title)
    {
        try
        {
            Uri uri = new Uri("http://tempuri.org/");
            ICredentials credentials = CredentialCache.DefaultNetworkCredentials;
            NetworkCredential credential = credentials.GetCredential(uri, "NTLM");
            string siteUrl = "http://spdev:91";
            ClientContext clientContext = new ClientContext(siteUrl);
            clientContext.Credentials = credential;
            Web web = clientContext.Web;
            clientContext.Load(web);
            List testlist = clientContext.Web.Lists.GetByTitle("Test");
            ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
            ListItem newItem = testlist.AddItem(itemCreateInfo);
            newItem["Title"] = title;
            newItem.Update();
            clientContext.ExecuteQuery();  
            return "";
        }
        catch (Exception ex)
        {
            return ex.Message;
        }        
    }

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

1 Ответ

0 голосов
/ 11 сентября 2018

DefaultNetworkCredentials означает, что веб-служба будет работать в текущем контексте безопасности, который является Пулом приложений. Также невозможно передать учетные данные пользователя.

Если ваша учетная запись пула приложений обладает достаточными правами (полный контроль над списком / сайтом), то вы можете установить поля Создано, Создано, Изменено и изменено с помощью CSOM. Вы можете передать данные текущего пользователя (логин) при вызове веб-службы

        ClientContext ctx = new ClientContext("http://site");
        List list = ctx.Web.Lists.GetByTitle("List");
        ListItemCollection items = list.GetItems(CamlQuery.CreateAllItemsQuery());
        ctx.Load(items);
        ctx.ExecuteQuery();
        User currentUser= ctx.Web.EnsureUser("domain\\user");
        ctx.Load(currentUser);
        ctx.ExecuteQuery();
        foreach (var item in items)
        {
            item["Created"] = "date";
            item["Modified"] = "date";
            item["Editor"] = currentUser;
            item["Author"] = currentUser;
            item.Update();
        }
        ctx.ExecuteQuery();
...