2016-06-21 6 views
0

Как проверить, имеет ли группа sharepoint права на чтение или запись в SPListItem.Как проверить, имеет ли группа sharepoint права на чтение или запись в SPListItem

Мы можем проверить разрешение SPUser с помощью этого кода:

SPBasePermissions perms = SPBasePermissions.EditListItems; 
spListItem.DoesUserHavePermissions(spUser, perms); 

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

spListItem.DoesUserHavePermissions(spGroup, perms); 

ответ

1

При проверке разрешений для группы, вы можете смотреть прямо на SPListItem-х RoleAssignments property (который представляет собой совокупность SPRoleAssignment объектов) и посмотреть, если Member свойства любого назначения ролей в соответствует которую вы хотите.

В отличие от пользователей, группы не могут быть вложены в группы Active Directory и группы SharePoint, поэтому вам не нужно искать более глубокие, чем прямые назначения роли.

Простейшим решением является использование метода GetAssignmentByPrincipal объекта SPRoleAssignmentCollection.

bool hasEdit = false; 
SPRoleAssignment ra = spListItem.RoleAssignments.GetAssignmentByPrincipal(spGroup); 
SPRoleDefinitionBindingCollection permissions = ra.RoleDefinitionBindings; 
foreach(SPRoleDefinition level in permissions) 
{ 
    if(level.BasePermissions & SPBasePermissions.EditListItems == SPBasePermissions.EditListItems 
     || level.BasePermissions & SPBasePermissions.FullMask == SPBasePermissions.FullMask) 
    { 
     hasEdit = true; 
     break; 
    } 
} 

Обратите внимание, что в приведенном выше коде, при сравнении BasePermissions свойство уровня разрешений на определенный SPBasePermissions enumeration, я использую подход, рекомендованный Microsoft's Guidelines for FlagsAttribute and Enum:

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