применять разрешения к загруженным документам sharepoint программно

#c# #.net #.net-3.5 #sharepoint-2010

#c# #.net #.net-3.5 #sharepoint-2010

Вопрос:

я разрабатываю интерфейс для извлечения файла из sharepoint. у меня есть следующий способ загрузить документ:

     public bool UploadDocument(string document)
    {
        if (String.IsNullOrEmpty(Path.GetFullPath(document)))
        {
            return false;
        }

        var site = GetNewDataContext(SiteUrl);
        try
        {
            using (var clientContext = GetNewContext())
            {
                var uploadLocation = string.Format("{0}{1}/{2}", SiteUrl, Helpers.ListNames.RequestedDocuments, Path.GetFileName(document));

                //Get Document List
                var documentslist = clientContext.Web.Lists.GetByTitle(Helpers.ListNames.RequestedDocuments);

                var fileCreationInformation = new FileCreationInformation
                {
                    Content = System.IO.File.ReadAllBytes(document), //Assign to content byte[] i.e. documentStream
                    Overwrite = true, //Allow owerwrite of document
                    Url = uploadLocation //Upload URL
                };

                var uploadFile = documentslist.RootFolder.Files.Add(fileCreationInformation);

                uploadFile.ListItemAllFields.Update();

                clientContext.ExecuteQuery();
            }
            site.SubmitChanges(ConflictMode.FailOnFirstConflict, true);
        }
        catch (Exception exception)
        {
            throw new ApplicationException(exception.Message);
        }

        return true;
    }
  

Однако мой следующий шаг — применить пользовательское разрешение.. я нашел несколько блогов в Интернете, которые демонстрируют, как это сделать:
http://howtosharepoint.blogspot.com/2010/10/programmatically-add-delete-modify-item.html

  • Возможно ли установить разрешение в процессе загрузки?
  • насколько я понимаю, при загрузке файла он наследует разрешения из списка, в который он загружен.
  • мой текущий метод загрузки возвращает ListItem.. Возможно ли преобразовать ListItem в SPListItem? Причина возврата SPListItem связана с блогом, который я опубликовал выше.. похоже, SPListItem содержит информацию о разрешении, которая мне нужна [для разрыва и применения нового разрешения к].

мой метод загрузки возвращает ListItem.. как я могу сделать это как разделяемый элемент

     private static ListItemCollection GetListItemCollectionFromSp(string documentListName, string name, string value, string type, int rowLimit)
    {
        ListItemCollection listItems = null;
        using (var ctx = GetNewContext())
        {
            var documentsList = ctx.Web.Lists.GetByTitle(documentListName);

            var camlQuery = new CamlQuery
            {
                ViewXml =
                    @"<View>

                    <Query>
                        <Where>

                            <Eq>
                                <FieldRef Name='"   name   @"'/>

                                <Value Type='"   type   "'>"   value   @"</Value>
                            </Eq>

                        </Where>
                        <RowLimit>"   rowLimit   @"</RowLimit>

                    </Query>
                </View>"
            };

            listItems = documentsList.GetItems(camlQuery);

            ctx.Load(documentsList);

            ctx.Load(listItems,
                items => items.IncludeWithDefaultProperties(
                item => item.DisplayName));

            ctx.ExecuteQuery();
        }

        return listItems;
    }
  

заранее спасибо

Ответ №1:

Похоже, вы пытаетесь настроить разрешения на уровне элемента в библиотеке документов. Поправьте меня, если я ошибаюсь.

Во-первых, вы должны прекратить наследование разрешений с родительского сайта. Затем вы можете создать рабочий процесс и позволить ему запускаться при загрузке документа. Проще разработать рабочий процесс для настройки разрешений на уровне элемента, чем делать это в коде. Обслуживание также было бы простым.