Ulteam.SharePoint.Client

Permissions Class

Namespace: Ulteam.SharePoint.Client

Description

Класс по работе с правами на элементе списка SharePoint

Methods

Name Description
AddRoleAssignment(ClientContext Context, ListItem Item, Principal Principal, RoleDefinition RoleDefinition, Boolean ExecuteQuery) Добавляет права пользователю или группе Principal на элемент списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа
RoleDefinition: Определение роли
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
AddRoleAssignment(ClientContext Context, ListItem Item, Principal Principal, String RoleDefinitionName, Boolean ExecuteQuery) Добавляет права пользователю или группе Principal на элемент списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа
RoleDefinitionName: Название роли. Например: “Совместная работа”, “Чтение” и т.д.
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
ChangeRoleAssignment(ClientContext Context, ListItem Item, Principal Principal, String DeleteRoleDefinitionName, String AddRoleDefinitionName) Замена прав пользователя или группы Principal на элемент списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа
DeleteRoleDefinitionName: Название роли для удаления. Например: “Совместная работа”, “Чтение” и т.д.
AddRoleDefinitionName: Название роли для добавления. Например: “Совместная работа”, “Чтение” и т.д.
ChangeRoleAssignment(ClientContext Context, ListItem Item, Principal Principal, RoleDefinition DeleteRoleDefinition, RoleDefinition AddRoleDefinition) Замена прав пользователя или группы Principal на элемент списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа
DeleteRoleDefinition: Определение роли для удаления. Например: “Совместная работа”, “Чтение” и т.д.
AddRoleDefinition: Определение роли для добавления. Например: “Совместная работа”, “Чтение” и т.д.
ContainsRoleDefinition(RoleDefinitionBindingCollection RoleDefinitionBindings, RoleDefinition RoleDefinition) Определяет вхождение роли в коллекцию.
RoleDefinitionBindings: Коллекция ролей
RoleDefinition: Определение роли
GetRoleAssignment(ClientContext Context, ListItem Item, Principal Principal) Получение установленных прав пользователя или группы Principal на элемент списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа
GetRoleAssignmentContext(ClientContext Context, RoleAssignment RoleAssignment, Boolean ExecuteQuery) Получение Member (пользователь или группа) и RoleDefinitionBindings (коллекция ролей) для RoleAssignment
Context: SharePoint site collection context
RoleAssignment: Установленные права пользователя или группы
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
GetRoleAssignmentCollection(ClientContext Context, ListItem Item, Boolean ExecuteQuery) Получение всех установленных прав на элемент списка Item
Context: SharePoint site collection context
Item: Элемент списка
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
GetPrincipals(ClientContext Context, ListItem Item, Boolean ExceptRestrictedRead) Получение всех Principal’ов у элемента списка Item.
Context: SharePoint site collection context
Item: Элемент списка
ExceptRestrictedRead: Если true, то не учитываются Principal’ы только с уровнем разрешений “Ограниченный доступ” (или “Restricted Read” для англоязычных сайтов). Значение по умолчанию: true
GetPrincipalsExceptList(ClientContext Context, ListItem Item, List<String> ExceptRoleDefinitionNameList, Boolean ExceptRestrictedRead) Получение всех Principal’ов у элемента списка Item. Не учитываются Principal’ы, у которых есть права только из списка ExceptRoleDefinitionNameList
Context: SharePoint site collection context
Item: Элемент списка
ExceptRoleDefinitionNameList: Список названий уровней разрешений, которые необходимо игнорировать.
ExceptRestrictedRead: Если true, то не учитываются Principal’ы только с уровнем разрешений “Ограниченный доступ” (или “Restricted Read” для англоязычных сайтов). Значение по умолчанию: true
GetRoleAssignmentsExceptList(ClientContext Context, ListItem Item, List<String> ExceptRoleDefinitionNameList) Получение всех установленных прав на элемент списка Item. Не учитываются RoleAssignment’ы, у которых есть RoleDefinition.Name только из списка ExceptRoleDefinitionNameList
Context: SharePoint site collection context
Item: Элемент списка
ExceptRoleDefinitionNameList: Список названий уровней разрешений, которые необходимо игнорировать.
GetRoleDefinition(ClientContext Context, String RoleName, Boolean ExecuteQuery) Получение RoleDefinition по названию роли.
Context: SharePoint site collection context
RoleName: Название роли. Возможные значения: Совместная работа, Изменение, Чтение и т.д.
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
GetRoleDefinition(ClientContext Context, RoleType RoleType, Boolean ExecuteQuery) Получение RoleDefinition по типу стандартной роли.
Context: SharePoint site collection context
RoleType: Тип стандартной роли
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
DeleteRoleDefinitionBinding(RoleAssignment RoleAssignment, RoleDefinition RoleDefinition) Удаление роли RoleDefinition из коллекции ролей RoleDefinitionBindings для установленных прав RoleAssignment на элемент списка. Для сохранения изменений необходим Context.ExecuteQuery().
RoleAssignment: Установленные права на элемент списка
RoleDefinition: Роль для удаления
DeletePermissionsByRoleDefinition(ClientContext Context, ListItem Item, RoleDefinition RoleDefinition, Boolean ExecuteQuery) Удаление всех прав определенной роли RoleDefinition из элемента списка Item
Context: SharePoint site collection context
Item: Элемент списка
RoleDefinition: Роль для удаления
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
DeletePermissionsByRoleTitle(ClientContext Context, ListItem Item, String RoleTitle, Boolean ExecuteQuery) Удаление всех прав определенного типа RoleTitle из элемента списка Item
Context: SharePoint site collection context
Item: Элемент списка
RoleTitle: Название роли (в уровнях разрешений site collection) для удаления. Возможные значения: Совместная работа, Изменение, Чтение и т.д.
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
DeletePermissionsByRoleType(ClientContext Context, ListItem Item, RoleType RoleType, Boolean ExecuteQuery) Удаление всех прав определенного типа RoleType из элемента списка Item
Context: SharePoint site collection context
Item: Элемент списка
RoleType: Тип стандартной роли для удаления
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
DeletePermissionByRoleDefinition(ClientContext Context, ListItem Item, Principal Principal, RoleDefinition RoleDefinition) Удаление прав пользователя или группы Principal определенной роли RoleDefinition из элемента списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа. Параметр может быть следующих типов: Principal, User, Group
RoleDefinition: Роль для удаления
DeletePermissionByRoleTitle(ClientContext Context, ListItem Item, Principal Principal, String RoleTitle) Удаление прав пользователя или группы Principal определенного типа RoleTitle из элемента списка Item
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа. Параметр может быть следующих типов: Principal, User, Group
RoleTitle: Название роли (в уровнях разрешений site collection) для удаления. Возможные значения: Совместная работа, Изменение, Чтение и т.д.
DeletePermissionByRoleType(ClientContext Context, ListItem Item, Principal Principal, RoleType RoleType) Удаление прав пользователя или группы Principal определенного типа RoleType из элемента списка Item
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа. Параметр может быть следующих типов: Principal, User, Group
RoleType: Тип стандартной роли для удаления
DeletePermissions(ClientContext Context, ListItem Item, Principal Principal, Boolean ExceptRestrictedRead, Boolean ExecuteQuery) Удаление всех прав пользователя или группы Principal из элемента списка Item.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа. Параметр может быть следующих типов: Principal, User, Group
ExceptRestrictedRead: Если true, то удалятся все уровни разрешений, кроме “Ограниченный доступ” (или “Restricted Read” для англоязычных сайтов). Значение по умолчанию: true
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
DeletePermissionsExceptList(ClientContext Context, ListItem Item, Principal Principal, List<String> ExceptRoleDefinitionNameList, Boolean ExceptRestrictedRead, Boolean ExecuteQuery) Удаление всех прав пользователя или группы Principal из элемента списка Item, кроме ExceptRoleDefinitionList.
Context: SharePoint site collection context
Item: Элемент списка
Principal: Пользователь или группа. Параметр может быть следующих типов: Principal, User, Group
ExceptRoleDefinitionNameList: Список названий уровней разрешений, которые необходимо оставить.
ExceptRestrictedRead: Если true, то удалятся все уровни разрешений, кроме “Ограниченный доступ” (или “Restricted Read” для англоязычных сайтов). Значение по умолчанию: true
ExecuteQuery: Если true, то выполняется Context.ExecuteQuery(). Значение по умолчанию: true.
IsEquivalent(Principal Principal, Principal ComparePrincipal) Сравнение Principal’ов по Title’ам без учета регистра
Principal: Пользователь или группа
ComparePrincipal: Пользователь или группа

Samples


public void Init()
{
    ClientContext context = TestSettings.Context;

    List list = TestSettings.PermissionsList;

    Dictionary<string, object> itemData = new Dictionary<string, object>
    {
        { "Title", "AddRoleAssignmentTest1" }
    };
    ListItem item = Lists.AddListItem(context, list, itemData);

    Principal groupPrincipal = context.Web.SiteGroups.GetByName("Unit Tests - посетители");

    // удаление прав определенного типа у пользователя или группы
    DeletePermissionByPrincipal(context, item, groupPrincipal);
    
    // удаление всех прав у пользователя или группы
    DeleteAllPermissionsByPrincipal(context, item, groupPrincipal);
    
    // удаление прав определенного типа у всех пользователей или групп
    DeleteAllPermissions(context, item);
    
    // добавление прав
    AddPermissions(context, item, groupPrincipal);

    // замена одних прав на другие
    ChangePermissions(context, item, groupPrincipal);

    // получение пользователей и групп, имеющих права на список
    List<Principal> principalList = GetPrincipalsExceptList(context, item);

    // настройка прав
    SetPermissions(context, item);

}

/// <summary>
/// Добавляет права пользователю или группе. 
/// </summary>
private void AddPermissions(ClientContext context, ListItem item, Principal groupPrincipal)
{
    // добавление прав "Совместная работа" группе "Ulteam Site - посетители" на элемент спика item.
    context.AddRoleAssignment(item, groupPrincipal, "Совместная работа");

    // то же самое, только используя RoleDefinition
    RoleDefinition roleDefinition = context.GetRoleDefinition("Совместная работа");
    context.AddRoleAssignment(item, groupPrincipal, roleDefinition);
}

/// <summary>
/// Замена прав пользователя или группы. 
/// </summary>
private void ChangePermissions(ClientContext context, ListItem item, Principal groupPrincipal)
{
    // замена прав у группы с "Совместная работа" на "Чтение"
    context.ChangeRoleAssignment(item, groupPrincipal, "Совместная работа", "Чтение");

    // то же самое, используя RoleDefinition'ы
    RoleDefinition deleteRoleDefinition = context.GetRoleDefinition("Совместная работа");
    RoleDefinition addRoleDefinition = context.GetRoleDefinition("Чтение");

    context.ChangeRoleAssignment(item, groupPrincipal, deleteRoleDefinition, addRoleDefinition);
}

/// <summary>
/// Удаление прав определенного типа у всех пользователей или групп. 
/// </summary>
private void DeleteAllPermissions(ClientContext context, ListItem item)
{
    // удаление прав "Совместная работа" у всех пользователей и групп.
    context.DeletePermissionsByRoleTitle(item, "Совместная работа");

    // то же самое, используя RoleDefinition
    RoleDefinition roleDefinition = context.GetRoleDefinition("Совместная работа");
    context.DeletePermissionsByRoleDefinition(item, roleDefinition);

    // то же самое, используя RoleType
    context.DeletePermissionsByRoleType(item, RoleType.Contributor);
}

/// <summary>
/// Удаление всех прав у пользователя или группы. 
/// </summary>
private void DeleteAllPermissionsByPrincipal(ClientContext context, ListItem item, Principal groupPrincipal)
{
    // удаление всех уровней разрешений для группы, кроме "Ограниченный доступ"
    context.DeletePermissions(item, groupPrincipal);

    List<string> roleDefinitionNameList = new List<string>
    {
        "Чтение",
        "Только просмотр"
    };
     
    // удаление всех уровней разрешений для группы, кроме "Чтение", "Только просмотр" и "Ограниченный доступ"
    context.DeletePermissionsExceptList(item, groupPrincipal, roleDefinitionNameList);
}

/// <summary>
/// Удаление определенных прав пользователя или группы. 
/// </summary>
private void DeletePermissionByPrincipal(ClientContext context, ListItem item, Principal groupPrincipal)
{
    // удаление прав "Совместная работа" у всех пользователей и групп.
    context.DeletePermissionByRoleTitle(item, groupPrincipal, "Совместная работа");

    // то же самое, используя RoleDefinition
    RoleDefinition roleDefinition = context.GetRoleDefinition("Совместная работа");
    context.DeletePermissionByRoleDefinition(item, groupPrincipal, roleDefinition);

    // то же самое, используя RoleType
    context.DeletePermissionByRoleType(item, groupPrincipal, RoleType.Contributor);
}

/// <summary>
/// Получение всех пользователей и групп, имеющих права на элемент списка.
/// </summary>
private List<Principal> GetPrincipalsExceptList(ClientContext context, ListItem item)
{
    List<string> roleDefinitionNameList = new List<string>
    {
        "Чтение",
        "Только просмотр"
    };

    // получение всех пользователей и групп, 
    // у которых есть какие-нибудь уровни разрешений на элемент Item, 
    // кроме "Чтение", "Только просмотр" и "Ограниченный доступ"
    return context.GetPrincipalsExceptList(item, roleDefinitionNameList);
}

/// <summary>
/// В этом примере все права (кроме прав "Полный доступ") у всех пользователей и групп заменяются на права "Чтение".
/// Плюс добавляются отдельно права "Совместная работа" для создателя элемента списка.
/// </summary>
private void SetPermissions(ClientContext context, ListItem item)
{
    FieldUserValue authorValue = item.GetValueAsUser("Author");
    Principal authorPrincipal = context.Site.RootWeb.SiteUsers.GetById(authorValue.LookupId);

    context.Load(authorPrincipal);
    context.ExecuteQuery();

    RoleDefinition editorRoleDefinition = context.GetRoleDefinition("Совместная работа");
    RoleDefinition readerRoleDefinition = context.GetRoleDefinition("Чтение");

    // получаем список всех пользователей и групп с правами, кроме ограниченного доступа
    List<Principal> principalList = context.GetPrincipals(item);

    // добавляем всем права на чтение
    foreach (Principal principal in principalList)
        context.AddRoleAssignment(item, principal, readerRoleDefinition, false);
    context.ExecuteQuery();

    // удаляем права у всех остальных пользователей или групп, кроме прав "Чтение" и "Полный доступ"
    List<string> exceptRoleDefinitionList = new List<string>
    {
        "Чтение",
        "Полный доступ"
    };
    foreach (Principal principal in principalList)
        context.DeletePermissionsExceptList(item, principal, exceptRoleDefinitionList, true, false);
    context.ExecuteQuery();

    // добавляем инициатору отдельные права "Совместная работа"
    context.AddRoleAssignment(item, authorPrincipal, editorRoleDefinition);
}

Updated: