как установить эксклюзивные разрешения для библиотеки документов SharePoint?

У меня есть требование заблокировать доступ к библиотеке SharePoint: только пользователи, принадлежащие ко всем группам, связанным с библиотекой, должны иметь доступ для чтения; другим нельзя позволять читать.

Допустим, у меня есть библиотека документов, которая касается трех проектов:

12345
13579
24680

У меня есть пользователи, которые принадлежат к одному или нескольким проектам:

Joe:   12345, 24680
Jane:  13579, 24680
Jim:   24680
Harry: 12345, 13579, 24680

Мне нужно ограничить доступ к этой библиотеке только пользователям, которые принадлежат ВСЕМ проектам. То есть, только Гарри должен иметь доступ; остальным следует отказать. Мы бы использовали группы SharePoint, названные в честь каждого проекта, чтобы представить отношение «принадлежность».

Отредактировано более подробно:

Мы планируем создать doc lib и настроить начальную безопасность с помощью рабочего процесса. Однако на основе информации, введенной в форму, с документом может быть связано больше проектов, и администраторы могут перемещать людей в группы проектов и выходить из них (например, для продвижения по службе, новых сотрудников и т. Д.)

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

В настоящее время мы пишем код для определения начального состояния безопасности для сайта:

Мы просматриваем список проектов, введенных пользователем в форму, при необходимости создаем новые группы проектов, создаем сайт и пару doclib, прерываем наследование ролей и назначаем нашим группам доступ для чтения к doclib. Мы добавляем по несколько пользователей в каждую группу проектов.

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


person Val    schedule 13.11.2009    source источник
comment
Я пытался написать подробный ответ, но мне пришло в голову, что я не думаю, что здесь достаточно подробностей. Статична ли принадлежность doclib-проекта? Если они изменятся, как / когда они изменятся? Будут ли они меняться при добавлении / удалении / изменении документов в библиотеке? Действительно ли ваш вопрос о том, как писать код для управления группами безопасности, или ваш вопрос больше касается отслеживания любых изменений в библиотеке или ее документах?   -  person Chris Farmer    schedule 13.11.2009
comment
хорошие вопросы! Я отредактировал сообщение ... дайте мне знать, если вам нужно больше.   -  person Val    schedule 13.11.2009


Ответы (3)


Вы усложнили себе задачу ... SharePoint и AD работают таким образом, я бы вернулся к чертежной доске, потому что это вызовет только боль;)

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

person ArjanP    schedule 13.11.2009
comment
ты прав, мы усложняли себе жизнь. Мы меняем требования ... - person Val; 03.12.2009

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

Это пример:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite("http://..."))
    {
        using (SPWeb web = site.OpenWeb())
        {
            web.AllowUnsafeUpdates = true;
            SPRoleType role = SPRoleType.Reader;
            SPRoleAssignment assignment = 
                new SPRoleAssignment(web.Groups["groupname"]);
            assignment.RoleDefinitionBindings.Add(
                web.RoleDefinitions.GetByType(role));

            SPList list = web.Lists["name"];
            SPListItemCollection items = list.GetItems(new SPQuery());
            foreach (SPListItem item in items)
            {
                if (!item.HasUniqueRoleAssignments)
                     item.BreakRoleInheritance(false);

                while (item.RoleAssignments.Count != 0) // remove all
                       item.RoleAssignments.Remove(
                       item.RoleAssignments.Count - 1);

                item.RoleAssignments.Add(assignment);
            }
        }
    }
});
person Rubens Farias    schedule 13.11.2009
comment
Да, мы планируем разорвать наследство. Спрашиваю КАК выставить разрешения. Мы не можем делать это вручную - мы должны делать это программно в определенный момент рабочего процесса. Я надеюсь на декларативный способ сделать это, чтобы я просто добавлял пользователей в различные группы и устанавливал DocLib проекта для различных групп. Это в основном работает для отношения ИЛИ: мы прерываем наследование и устанавливаем доступ на чтение в DocLib для членов группы 1, 2 или 3, и если пользователь является членом группы 1, 2 или 3, то система позволяет им войти. мы устанавливаем доступ для чтения к DocLib членам групп 1, 2 И 3? - person Val; 13.11.2009

Единственный способ, которым я могу достичь этого, - это создать настраиваемое задание таймера, которое обновляет вашу библиотеку документов каждый день, удаляя все права, а затем добавляя их снова в одночасье. Это будет означать, что людям, которые присоединятся к этим проектам, придется ждать 1 день, чтобы получить доступ. Вы должны просто создать коллекцию всех пользователей группы group1 и проверить каждого из них, существуют ли они в группах 2, 3, ... и не удаляют ли они их из коллекции.

person KoenVosters    schedule 13.11.2009