Azure DevOps 扩展之 Hub 插件的菜单权限控制配置
这是 Hub 插件的描述配置代码片段:
{
"contributions": [
{
"id": "feature-hidden-fields-manager-hub",
"type": "ms.vss-web.feature",
"targets": [
"ms.vss-web.managed-features",
"ms.vss-web.managed-features-onprem"
],
"description": "Enable Work Item Type Hidden Fields Manager Feature",
"properties": {
"name": "Enable Work Item Type Hidden Fields Manager",
"userConfigurable": false,
"hostConfigurable": true,
"defaultState": false,
"hostScopes": [
null,
"collection"
]
}
},
{
"id": "hidden-fields-manager-hub",
"type": "ms.vss-web.hub",
"targets": [
"ms.vss-web.collection-admin-hub-group"
],
"includes": [
"ms.vss-tfs-web.tfs-page-data-service",
"ms.vss-features.host-navigation-service",
"ms.vss-features.extension-data-service",
"ms.vss-features.host-dialog-service"
],
"properties": {
"iconProps": {
"iconName": "WorkItem",
"className": "admin-tab-icon"
},
"name": "Work Item Type Hidden Fields Manager",
"order": 101,
"uri": "dist/Hub/HiddenFieldManagerHub.html",
"supportsMobile": true
},
"constraints": [
{
"name": "Security",
"properties":{
"namespaceId": "3E65F728-F8BC-4ecd-8764-7E378B19BFA7",
"namespaceToken": "NAMESPACE",
"permission": 32,
"allowSystemContext": true,
"serviceInstanceType": "00000028-0000-8888-8000-000000000000"
}
},
{
"name": "Feature",
"properties": {
"featureId": "Allen.hidden-fields-manager.feature-hidden-fields-manager-hub"
}
}
]
}
]
}
例如:我需要使用该 Hub 插件的人,必须有 ProcessTemplates 进程模板 (3E65F728-F8BC-4ecd-8764-7E378B19BFA7) 管理权限,才能看到菜单(入口)。
其中 namespaceId 的常量值,来自权限空间ID列表:https://docs.microsoft.com/en-us/azure/devops/organizations/security/namespace-reference?view=azure-devops
namespaceId 常量值 参考代码:
namespace Microsoft.TeamFoundation.Framework.Common
{
public static class FrameworkSecurity
{
public static readonly Guid FrameworkNamespaceId = new Guid("1f4179b3-6bac-4d01-b421-71ea09171400");
public static readonly Guid EventSubscriptionNamespaceId = new Guid("58B176E7-3411-457a-89D0-C6D0CCB3C52B");
public static readonly Guid EventSubscriberNamespaceId = new Guid("2BF24A2B-70BA-43D3-AD97-3D9E1F75622F");
public static readonly Guid JobNamespaceId = new Guid("2a887f97-db68-4b7c-9ae3-5cebd7add999");
public static readonly Guid RegistryNamespaceId = new Guid("4ae0db5d-8437-4ee8-a18b-1f6fb38bd34c");
public static readonly Guid CollectionManagementNamespaceId = new Guid("f66fc5d6-60e1-443e-9d16-851364ce3b99");
public static readonly Guid CatalogNamespaceId = new Guid("6BACCF73-1500-476f-8B2B-94F4489A59AA");
public static readonly Guid IdentitiesNamespaceId = new Guid("5A27515B-CCD7-42c9-84F1-54C998F03866");
public static readonly Guid Identities2NamespaceId = new Guid("C2EFB788-4DD2-4301-B2EE-EC8ED6955B4E");
public static readonly Guid LocationNamespaceId = LocationSecurityConstants.NamespaceId;
public static readonly Guid StrongBoxNamespaceId = new Guid("4A9E8381-289A-4DFD-8460-69028EAA93B3");
public static readonly Guid DiagnosticNamespaceId = new Guid("A1178DF8-8630-4786-B2A0-3A580DDF63EA");
public static readonly Guid TaggingNamespaceId = new Guid("BB50F182-8E5E-40B8-BC21-E8752A1E7AE2");
public static readonly Guid TracingNamespaceId = new Guid("0F623D1C-A21B-4A66-B4AE-07DD445502FB");
public static readonly Guid ProcessTemplatesNamespaceId = new Guid("3E65F728-F8BC-4ecd-8764-7E378B19BFA7");
public static readonly Guid ProcessNamespaceId = new Guid("2DAB47F9-BD70-49ED-9BD5-8EB051E59C02");
public static readonly Guid MessageQueueNamespaceId = new Guid("F3E9DDE6-32CD-48BB-B62D-1D73BCAF42F1");
public static readonly string MessageQueueNamespaceRootToken = "Tfsmq";
public static readonly char MessageQueuePathSeparator = '/';
public static readonly string FrameworkNamespaceToken = "FrameworkGlobalSecurity";
public static readonly string JobNamespaceToken = "AllJobs";
public static readonly string CollectionManagementNamespaceToken = "AllCollections";
public static readonly char CollectionManagementPathSeparator = '/';
public static readonly char RegistryPathSeparator = '/';
public static readonly string RegistryNamespaceRootToken = FrameworkSecurity.RegistryPathSeparator.ToString();
public static readonly char IdentitySecurityPathSeparator = '\\';
public static readonly string IdentitySecurityRootToken = "$";
public static readonly char LocationPathSeparator = LocationSecurityConstants.PathSeparator;
public static readonly string LocationNamespaceRootToken = LocationSecurityConstants.NamespaceRootToken;
public static readonly string ServiceDefinitionsToken = LocationSecurityConstants.ServiceDefinitionsToken;
public static readonly string AccessMappingsToken = LocationSecurityConstants.AccessMappingsToken;
public static readonly char StrongBoxSecurityPathSeparator = '/';
public static readonly string StrongBoxSecurityNamespaceRootToken = "StrongBox";
public static readonly string ProcessTemplateNamespaceToken = "NAMESPACE";
public static readonly char DiagnosticPathSeparator = '/';
public static readonly string DiagnosticNamespaceToken = "Diagnostic";
public static readonly Guid TeamProjectNamespaceId = TeamProjectSecurityConstants.NamespaceId;
public static readonly Guid TeamProjectCollectionNamespaceId = new Guid("3E65F728-F8BC-4ecd-8764-7E378B19BFA7");
public static readonly string TeamProjectCollectionNamespaceToken = "NAMESPACE";
public static readonly string TracingNamespaceToken = "Global";
public static readonly Guid ProxyNamespaceId = new Guid("CB4D56D2-E84B-457E-8845-81320A133FBB");
public static readonly string ProxyNamespaceToken = "Proxy";
}
}
permission 常量值 参考代码:
namespace Microsoft.TeamFoundation.Framework.Common
{
public static class FrameworkPermissions
{
public const int GenericRead = 1;
public const int GenericWrite = 2;
public const int Impersonate = 4;
public const int TriggerEvent = 16;
public const int AllPermissions = 23;
}
}
Azure DevOps 扩展之 Hub 插件的菜单权限控制配置的更多相关文章
- C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用心得
在网上查了很多,发现没有讲述关于--C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用--的资料 自己研究了一个使用方法.下面来看看. 我有两个窗体:LOGINFRM,M ...
- pc vue 项目中的菜单权限控制
在pc 管理系统这种类型的产品,通常会涉及到账号权限的控制,不同的账号权限能浏览的功能模块是不同的,对应侧边栏菜单模块的显示也会不同. 场景一.(电商类管理系统) 登录 登录后,依次获取账号 toke ...
- vue实现菜单权限控制
大家在做后台管理系统时一般都会涉及到菜单的权限控制问题.当然解决问题的方法无非两种——前端控制和后端控制.我们公司这边的产品迭代速度较快,所以我们是从前端控制路由迭代到后端控制路由.下面我会分别介绍这 ...
- vue+elementui搭建后台管理界面(6登录和菜单权限控制[二])
根据权限计算路由的代码 /** * 通过meta.role判断是否与当前用户权限匹配 * @param roles * @param route */ function hasRoles (roles ...
- vue+elementui搭建后台管理界面(6登录和菜单权限控制)
不同的权限对应不同的路由(菜单),同时侧边栏也根据权限异步生成,实现登录和鉴权思路如下: 登录:点击登录,服务器验证通过后返回一个 token ,然后存到 cookie,再根据 token 拉取用户权 ...
- 使用X-Pack插件来进行权限控制
1.为elasticsearch安装X-Pack插件.进入 elasticsearch根目录,执行: bin/elasticsearch-plugin install x-pack杀掉进程,重启es, ...
- yii2 rbac权限控制之菜单menu详细教程
作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- yii2权限控制rbac之菜单menu最详细教程
前面我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充. ...
- 初识ABP vNext(4):vue用户登录&菜单权限
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 登录 菜单权限 运行测试 最后 前言 上一篇已经创建好了前后端项目,本篇开始编码部分. 开始 几乎所有的系统都绕不开登 ...
随机推荐
- C++中union的使用方法
转载:https://blog.csdn.net/hou09tian/article/details/80816445 1 概述 1.1 定义 union即为联合,它是一种特殊的类.通过关键字unio ...
- K-DTree入门
\(K-D Tree\),一种用来维护\(K\)维数据的数据结构.常用于维护各种高维的数据,或者是邻近搜索等.从另一种意义上说,实际上就是高维的二叉搜索树.对于一些常见的问题,如\(k\)远点对.三位 ...
- vue中解决chrome浏览器自动播放音频 和MP3语音打包到线上
一.vue中解决chrome浏览器自动播放音频 需求 有新订单的时候,页面自动语音提示和弹出提示框: 问题 chrome浏览器在18年4月起,就在桌面浏览器全面禁止了音视频的自动播放功能.严格地来说, ...
- 达梦产品技术支持培训-day6-DM性能诊断与优化
(本文只作为个人随笔用途,非官方文档,请勿作他用,谢谢) 1.DM8查询优化基本思路 1.1 操作系统性能诊断 linux常用系统监控命令 使用 top 命令查看cpu使用率 使用 iostat 命令 ...
- CAD& CG 2020 胡事民教授—开源框架Jittor的创新与探索
题目:深度学习框架"计图"的创新与探索 报告人:胡事民 报告人简介:胡事民,清华大学计算机系教授,主要研究方向为计算机图形学.虚拟现实.智能信息处理和系统软件等. 报告简介:深度学 ...
- 关于 ECMAScript、JavaScript、ES6、ECMAScript 2015
ECMAScript 是一种规范,而 JavaScript 是对规范的实现.ECMA 是标准化组织. 最早的 JavaScript 是由 Netscape 公司开发的,并提交给 ECMA 标准化组织, ...
- php中 ob_函数 例:ob_start();用法
ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担 ob的基本原则:如果o ...
- EV加密播放器的分析过程+过虚拟机方法
开启了OD载入播放器进行分析,发现如下问题:1.播放器会进行翻录检测2.防止虚拟机播放3.视频播放后,可直接对内存操作提取出源视频翻录检测:主要是对指定的文件名或进程名对比虚拟机检测:是针对虚拟机特征 ...
- ttl转以太网
ttl转以太网 ttl转以太网ZLSN3007S是实现TTL电平串口转以太网的"超级网口",产品自带网络变压器和RJ45网口,可以方便实现单片机.各类TTL电平串口设备的联网.首先 ...
- day03 Pyhton学习
昨日回顾 1.while循环 语法 while 条件: 语句 else: 语句 执行语句:判断语句是否为真.如果真,执行循环,然后再次判断条件,如果不满足执行else语句. break 结束循环 co ...