Создание пользовательской библиотеки документов в SharePoint - PullRequest
2 голосов
/ 29 июня 2009

У меня есть библиотека документов на моей странице SharePoint, и в ней 10 документов.

Если пользователь A вошел в систему, я хочу, чтобы он видел только 5 из этих документов в этой библиотеке документов.

Как мне создать собственную библиотеку документов, чтобы это работало?

У меня установлен MOSS.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 30 июня 2009

Напишите ItemEventReceiver, который нарушает права доступа на основе поля в библиотеке, то есть столбца, который выполняет различные роли.

Мы сделали это, создав список, содержащий все роли, связанные с группами sharepoint.

т.е.

Администратор -> Владельцы сайтов (SPGroup), Администраторы компании (SPGroup)

Менеджеры -> Менеджеры (SPGroup)

тогда в нашем типе контента у нас есть столбец поиска к этому списку.

Вот код для ItemEventReceiver:

public override void ItemUpdated(SPItemEventProperties properties)
{
lock (_lock)
{
try
{
    using (SPSite site = new SPSite(properties.SiteId,
            properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken))
    using (SPWeb web = site.OpenWeb(properties.RelativeWebUrl))
    {
        web.AllowUnsafeUpdates = true;
        var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);

        var roles = item["Roles"] as SPFieldLookupValueCollection;
        var rolesList = web.Site.RootWeb.Lists["Company Roles"];
        var groupsToAdd = new List<SPFieldUserValue>();

        if (item.HasUniqueRoleAssignments)
        {
            item.ResetRoleInheritance();
            item = item.ParentList.GetItemById(item.ID);
        }

        if (roles != null && roles.Count > 0)
        {
            // Iterate over the roles and see if there is a group associated
            foreach (var role in roles)
            {
                var roleItem = rolesList.GetItemById(rol.LookupId);
                if (roleItem != null)
                {
                    // This is the SPgroup field in the rolesList
                    var groups = roleItem["Groups"] as SPFieldUserValueCollection;
                    if (groups != null)
                    {
                        groupsToAdd.AddRange(from g in groups
                                             where g.User == null
                                             select g);
                    }
                }
            }
            if (groupsToAdd.Count > 0)
            {
                item.BreakRoleInheritance(false);
                foreach (var value in groupsToAdd)
                {
                    var group = web.Groups[value.LookupValue];
                    var assignment = web.RoleAssignments.GetAssignmentByPrincipal(group);
                    item.RoleAssignments.Add(assignment);
                }
            }
        }

        DisableEventFiring();
        item.SystemUpdate(false);
        EnableEventFiring();
    }
}
catch (Exception ex)
{
    //LOG ERROR
}
}
}
3 голосов
/ 29 июня 2009

Вы можете настроить различные разрешения для каждого документа в библиотеке документов. Просто выберите параметр «Управление разрешениями» для каждого элемента и отключите наследование разрешений от уровня библиотеки документов. Просто отметьте, что наличие слишком большого количества документов с разрешениями на уровне элементов может создать для вас кошмар обслуживания. Другим вариантом может быть создание двух библиотек документов с разными разрешениями.

1 голос
/ 25 сентября 2009

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

например.

Создайте папку с именем «Менеджеры», нарушите права доступа и установите права только для менеджеров. Создайте еще одну папку с именем «Сотрудник 1», нарушите права доступа и установите права «Участие» для Сотрудника и менеджера Сотрудника.

Поместите файлы в соответствующие папки, и он унаследует права от папки.

Таким образом, менеджеры могут видеть файлы менеджера и все файлы своих сотрудников. Пользователи могут видеть только свои собственные файлы.

Подобную логику можно выполнить для Штаб-квартиры, Региона 1, Региона 2 и т. Д. И создания разных групп для каждого региона, а затем назначения группы для разрешений папки.

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

...