Ответ Хью Линса, вероятно, работает, но я не был полностью удовлетворен. Вот несколько полезных советов (с использованием библиотек MS DLL и .NET API).
IGroupSecurityService group_security_service; // declared deprecated
group_security_service = team_project_collection.GetService<IGroupSecurityService>();
...
// create group
group_security_service.CreateApplicationGroup(prjinfo.Uri, sGroupName, sGroupDescription);
...
Извлечение необходимых прав доступа для группы (т.е. Contributores):
- IdentityDescriptor группы
- Маркер безопасности для каждого используемого пространства имен безопасности
1.IdentityDescriptor
TeamFoundationIdentity tfs_id = identity_management_service.ReadIdentity(IdentitySearchFactor.LocalGroupName,sGroup, MembershipQuery.Expanded, ReadIdentityOptions.IncludeReadFromSource);
var desc = tfs_id.Descriptor
2. Здесь приведены следующие примеры:
https://docs.microsoft.com/en-us/azure/devops/cli/security_tokens Мы должны создать строку, которая зависит от используемого пространства имен безопасности.
var securityNamespaces = securityService.GetSecurityNamespaces();
Для каждого пространства имен безопасности формат токена отличается небольшим битом. Например, для пространства имен «Project»:
$PROJECT:vstfs:///Classification/TeamProject/xxxxxxxx-a1de-4bc8-b751-188eea17c3ba'
Отсюда vstfs: ///...-Uri:
prjinfo = common_structure_service4.GetProjectFromName(sTeamProject);
--> prjinfo.Uri
Для вызова QueryAccessControlList нам нужен дескриптор какпараметр массива:
IdentityDescriptor[] tfidDescriptors = new IdentityDescriptor[] {desc};
Вызов QueryAccessControlList:
foreach (var secNS in securityNamespaces)
{
string sToken = CreateToken(secNS.Description.NamespaceId);
AccessControlList acl = secNS.QueryAccessControlList(sToken, tfidDescriptors, false);
foreach (var ace in acl.AccessControlEntries)
{
ace.Allow vs. ace.Deny contain bit coded permissions
}
}
Позже мы можем установить разрешения для другой группы.
(Мы должны разделить INHERIT и ALLOW / DENY).
Пример:
...
secNS.RemovePermissions(sToken, desc, inherits);
...
secNS.SetPermissions(sToken, desc, allows, denies, true);
Приветствия.