Как установить эксклюзивные разрешения для библиотеки документов SharePoint? - PullRequest
0 голосов
/ 13 ноября 2009

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

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

12345
13579
24680

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 13 ноября 2009

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

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

1 голос
/ 13 ноября 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);
            }
        }
    }
});
0 голосов
/ 13 ноября 2009

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

...