Вклад ограничения являются ответом.В частности, ограничение «Безопасность».Он выполняет проверку разрешений для защищаемого объекта в TFS и скрывает команду, если текущий пользователь не имеет требуемого разрешения.
В моем случае я бы использовал определенный пул агентов в качестве прокси дляусловие "этот пользователь является администратором".Внутренне назначения ролей в пулах и очередях обрабатываются как ACL.GUID пространства имен для действий пула: 101EAE8C-1709-47F9-B228-0E476C35B3BA («DistributedTask»), формат токена - «AgentPools / {PoolID} /».Маска доступа 27, соответствующая Use+Administer Permissions+Manage+View
, соответствует маске администратора пула.
Ограничение указано в манифесте под объектом вклада:
{
"contributions": [
{
"id": "mycommand",
"type": "ms.vss-web.action",
"constraints": [
{
"name": "Security",
"properties": {
"namespaceId":"101EAE8C-1709-47F9-B228-0E476C35B3BA",
"namespaceToken":"AgentPools/17/",
"permission": 27
}
}],
// More contribution stuff...
}],
// More extension stuff...
}
* 1008Недостатком этого подхода является то, что мне нужно жестко закодировать идентификатор пула в расширении.
Расширение стало специфичным для нашего конкретного экземпляра TFS. Это работает для меня, хотя, это внутреннее расширение, я не планирую публиковать или распространять его, и у него уже есть тонна зависимостей от спецификинаша настройка TFS.
Естественно, все это совершенно недокументировано и может сломаться в любое время.Но опять же, очень мало API-поверхности TFS документировано .
В манифесте также есть параметр restrictedTo
, который является недавним добавлением и не упоминается вОсновной вклад, проявленный док.Это похоже на ограничение доступа посторонних пользователей, несколько отличающееся от моего случая.
РЕДАКТИРОВАТЬ: Я написал сообщение в блоге с дополнительной информацией .Помимо безопасности, есть еще 5 классов ограничений.