TFS 2018u1。我正在为发布定义构建一个带有自定义上下文菜单命令的扩展。我希望其中一些有条件地不可见(根据当前用户的权限)。有什么办法可以隐藏它们?
故意不打电话VSS.register()
没有帮助;自定义命令仍然存在,只是什么都不做。
这不是安全措施,而是可用性问题(菜单越来越拥挤)。
编辑:在贡献数据结构中有一个名为constraints
. 它没有记录,不知道它来自哪里。应该是清单。我能找到的唯一提到的约束是在TFX 工具源中。显然,constraints
是清单 JSON 中的一个有效值(可能在贡献对象下),它应该是一个数组。一个假设,一个ContributionConstraint
对象。后者是有记录的。
根据文档,约束对象具有一个name
属性,该属性包含对IContributionFilter
类的引用。我在文档和 TypeScript 源代码中都找不到该类的任何提及。但是,Microsoft.VisualStudio.Services.ExtensionManagement.Sdk.Server.IContributionFilter
在 assembly 中有一个接口Microsoft.VisualStudio.Services.ExtensionManagement.Sdk.Server.dll
,它有一个Name
属性。有派生类bin\Plugins\Microsoft.VisualStudio.Services.ExtensionManagement.Sdk.Plugins.dll
:
- ExtensionLicensedFilter
- 特征标志过滤器
- LegacyFeatureEnabledFilter
- 主动扩展过滤器
- 特征过滤器
- 安全过滤器
专注于后者。名称是“安全”。看起来它支持以下属性:
- namespaceId (GUID) - AKA 安全命名空间
- namespaceToken (string) - 安全对象令牌
- 权限 (int) - 位掩码,类似于 ACL 中的掩码
- allowSystemContext (可选布尔) - ???
- serviceInstanceType(可选 GUID)- 仅对 VSTS 重要
如果您在贡献对象下的清单 JSON 中指定约束,至少它会通过 TFS 数据结构传播并显示VSS.getContribution()
在扩展脚本的下方。现在,关于安全检查的详细信息......