服务元信息
服务元信息:serviceMetaInfo,包括三种信息,分别是菜单、角色、权限。
- 开发时,服务元信息存储在一个个的 serviceMetaInfo.json 文件中
- 在 IDE 的页面配置中,默认角色分配
- 选择无:在 w 文件的服务元信息文件中生成菜单信息
- 选择全体成员(分配给注册用户角色):在 w 文件的服务元信息文件中生成菜单信息、菜单权限项和注册用户角色,注册用户角色包括菜单权限项
- 选择特定部门(创建功能角色):在 w 文件中服务元信息文件中生成菜单信息、菜单权限项和一个功能角色,该角色包括菜单权限项
- 在 IDE 的角色权限设置中,添加应用角色,以及包含的权限,配置内容存储在 xxx.user.serviceMetaInfo.json 文件中
- 在 IDE 的页面配置中,默认角色分配
- 在企业门户应用中。通过“服务注册”注册服务时,将角色和权限写入到企业门户的角色表和权限表中
- 在企业门户应用中,通过“系统管理-权限管理-应用资源管理”调整应用角色和权限后,调整内容存储在 manager_smi_provider 表中
- 在企业门户应用中,通过“系统管理-系统配置-功能树配置”调用菜单信息后,调整内容存储在 manager_service 表中
服务元信息文件
在 IDE 中,服务元信息文件以散文件的形态存在,有两种服务元信息文件
- 一种是 W 文件的服务元信息文件,是系统自动生成的,和 W 文件同名
- 一种是通过“角色权限设置”生成的服务元信息文件,命名规则为:xxx.user.serviceMetaInfo.json
w 文件的 serviceMetaInfo
系统给每个 w 文件(目录名中包括 dialog 的目录下的 w 文件除外),生成服务元信息
自定义的 serviceMetaInfo
在角色权限设置中,可以添加角色,给角色分配权限,这些都会记录在 xxx.user.serviceMetaInfo.json 文件中
合并 serviceMetaInfo
通过“域名/serviceMetaInfo”访问时,返回所有 xxx.serviceMetaInfo.json 合并后的服务元信息
"serviceInfo": {
"name": "{serviceName}",
"label": "{serviceLabel}"
},
"menu": {
"title": "{serviceLabel}",
"color": "#3494F8",
"children": [
{
"ext": {},
"types": [
"pcx",
"func"
],
"title": "组织管理",
"url": "/entry/opm-mobileapp/opm-mobile/org.w"
},
{
"ext": {
"code": "wf_waitTask",
"more": {
"title": "任务中心",
"url": "/entry/wf-mobileapp/wf-mobile/taskCenter.w?parameter=waiting"
}
},
"types": [
"widget",
"pcx"
],
"title": "我的待办",
"url": "/entry/wf-mobileapp/wf-mobile/widget/waitTask.w"
},
{
"ext": {
"tabBar": {
"iconPath": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18 6H8C6.89543 6 6 6.89543 6 8V18C6 19.1046 6.89543 20 8 20H18C19.1046 20 20 19.1046 20 18V8C20 6.89543 19.1046 6 18 6Z\" fill=\"none\" stroke-width=\"3\" stroke-linejoin=\"round\"/><path d=\"M18 28H8C6.89543 28 6 28.8954 6 30V40C6 41.1046 6.89543 42 8 42H18C19.1046 42 20 41.1046 20 40V30C20 28.8954 19.1046 28 18 28Z\" fill=\"none\" stroke-width=\"3\" stroke-linejoin=\"round\"/><path d=\"M40 6H30C28.8954 6 28 6.89543 28 8V18C28 19.1046 28.8954 20 30 20H40C41.1046 20 42 19.1046 42 18V8C42 6.89543 41.1046 6 40 6Z\" fill=\"none\" stroke-width=\"3\" stroke-linejoin=\"round\"/><path d=\"M40 28H30C28.8954 28 28 28.8954 28 30V40C28 41.1046 28.8954 42 30 42H40C41.1046 42 42 41.1046 42 40V30C42 28.8954 41.1046 28 40 28Z\" fill=\"none\" stroke-width=\"3\" stroke-linejoin=\"round\"/></svg>"
}
},
"types": [
"mobile",
"tab"
],
"title": "工作台",
"url": "/entry/mobileapp/mobile/work.w"
}
],
"ext": { },
"types": [ ]
},
"authorize": {
"permissions": [
{
"code": "*:/entry/opm-mobileapp/opm-mobile/org.w:get",
"ui": false,
"name": "组织管理",
"id": "opm_mobileapp_mobile_org",
"type": "menu"
},
{
"code": "*:/entry/wf-mobileapp/wf-mobile/taskCenter.w:get",
"ui": false,
"name": "任务中心",
"id": "wf_permission_001",
"type": "menu"
}
],
"roles": [ ]
}
}
查看服务元信息
在 IDE 里面,通过请求 https://IDE域名/serviceMetaInfo 查看当前应用的 serviceMetaInfo,例如:https://testzx02286-zx0228-ide.c.xcaas.net/serviceMetaInfo
发布后,通过请求 https://门户域名/应用服务名/serviceMetaInfo 查看应用的 serviceMetaInfo,例如:https://entryzx02286-vip.c.xcaas.net/test/serviceMetaInfo
结构说明
serviceMetaInfo 包括3个节点:基本信息 serviceInfo、菜单信息 menu 和权限 authorize。
基本信息
serviceInfo 节点描述应用的基本信息。name 用于应用注册,需保证唯一
菜单信息
menu 节点用来描述应用的菜单信息
- title:菜单名
- children:下级菜单
- icon:菜单图标,字符串类型,支持使用内置图标和自定义图标
- 桌面端和移动端的内置图标不同,两个端都有页面,且使用内置图标,则需要分别设置图标,例如:{"pcx":"AccountBookOutlined","mobile":"star-o"}
- 只有一个端的页面,或使用自定义图标,只写图标名,例如:AccountBookOutlined
- color:图标颜色,字符串类型
- 桌面端门户将颜色用于菜单图标的颜色,移动端门户将颜色用于菜单图标的背景色
- 只写颜色,两个端使用相同的颜色,例如:#fd0808
- 两个端使用不同的颜色,则需要分别设置,例如:{"pcx":"#fd0808","mobile":"#3494F8"}
- url:菜单 url
- 内部页面格式为:/服务名/mobileapp/mobile/xxx(页面有分组 xxx 是:分组目录/文件名,没有分组是:文件名),文件名是带.w 后缀的,例如:/react/mobileapp/mobile/org.w
- 外部页面格式为:从 http 或者 https 开始的完整路径
- 如果 types 中配置了 tab,url 上需要加上参数 type=tab&$pparams=tab,例如:/entry/mobileapp/mobile/infoPublish/infoPub.w?type=tab&$pparams=tab
- types 菜单类型,数组
- pcx:桌面端页面
- pc:经典桌面端页面
- mobile:移动端页面
- func:菜单
- widget:小部件
- process:流程
- openPage:在浏览器中使用新页打开当前页面
- iframe:使用 iframe 打开当前页面
- tab:移动端导航栏页面
- 例如
- pcx 和 func 代表是桌面端菜单,在桌面门户中可见,如果是流程的功能需要加上 process
- mobile 和 func 代表是移动端菜单,在移动门户中可,如果是流程的功能需要加上 process,如果是移动门户导航栏需要加上 tab
- pcx 和 widget 代表桌面端门户首页小部件
- openPage 代表会通过 window.open 打开对应 url,url 中会添加 token 参数
- iframe 代表会在门户的功能区域,通过 iframe 打开
- 一个功能,桌面端和移动端都有页面,types 写为 pcx、mobile、func
- ext:菜单扩展信息
- 移动导航栏配置信息
- 导航栏图标支持图片和 svg 图标
- 使用图片需要设置两张图片,一个是未选中时图标,一个是选中时图标,例如:{"tabBar":{"iconPath":"/xxx/a.png","selectIconPath":"/xxx/b.png"}}
- 使用 svg 图标,设置一个图标即可,选中时会使用主题色渲染图标,例如:{"tabBar":{"iconPath":"
<svg/>
"}}
- tabBar.iconPath:未选中时的图标
- tabBar.selectedIconPath:选中时的图标
- tabBar.homePage:默认“移动首页导航”中的第一页作为主页,设置为 true,当前页面会作为主页
- 导航栏图标支持图片和 svg 图标
- 小部件配置信息
- code:小部件唯一编码
- showTitle:是否展示标题栏
- more.title:更多页面标题
- more.url:更多页面链接地址(当链接地址为空时,标题栏不显示更多按钮)
- 移动导航栏配置信息
权限信息
authorize 节点用来描述应用的权限信息
- permissions 部分用来描述应用的所有权限项
- id:权限项 id,自己定义
- code:权限项编码,参考《权限》中权限编码的说明
- name:权限项名称
- type:菜单为 menu,API 为 service,数据权限为 sql。type 的值是可以自己定义的,主要就是前面的 code 项要描述正确
- roles 部分是当前应用的角色列表
- id:角色 id
- code:角色 code
- name:角色名
- permissions:当前角色包含的权限
说明:
- 一个菜单项可对应一个权限
- 后台 api 同样可以在权限中描述,后台 api 描述的时候如果是同域可以进行鉴权
如果权限中有需要根据 url 参数区分权限项的情况,请求的时候或者描述菜单项的时候添加参数 $pparms 来声明是权限参数。比如
- http://console.newdao.net/order?type=user 这样一个请求的url,鉴权的时候会看是否有 /order 的 api 权限
- http://console.newdao.net/order?type=user&$pparams=type 这样一个请求的url,鉴权的时候会看是否有 /order?type=user 的 api 权限
在定义角色时,可以使用系统内置的角色。系统内置3个角色如下:
- authc:注册用户角色,用户登录后自动具有这个角色
- anonymous:匿名用户角色,用户未登录时自动具有这个角色
- admin:系统管理员角色,拥有全部权限
存储服务元信息的表
存储在运行时调整的服务元信息
在运行时,可以通过应用资源管理功能,调整服务元信息。
同 ide 里面的角色权限设置功能一样,可以添加角色,添加权限,给角色分配权限,这些都会记录在 manager_smi_provider 表中
manager_smi_provider 的结构如下
列 | 模型名 | 字段名 | 说明 |
---|---|---|---|
主键 | fid | fid | |
配置名称 | name | name | 服务名-1表示草稿,服务名-0表示已发布 |
服务名称 | service_name | service_name | |
服务标签 | service_label | service_label | |
服务元数据 | service_meta_info | service_meta_info | 调整的serviceMetaInfo信息 |
配置状态 | status | status | |
版本 | fversion | fversion |
存储在运行时调整的菜单信息
在运行时,可以通过功能树配置功能,调整菜单信息。
当桌面端和移动端的菜单名称、层级需要调整时,使用功能树配置进行调整,调整后的数据存储在 manager_caidangl 表中
manager_caidangl 的结构如下
列 | 模型名 | 字段名 | 说明 |
---|---|---|---|
主键 | fid | fid | |
菜单种类 | fcontext | fcontext | pcx 表示桌面端菜单,mobile 表示移动端菜单 |
自动合并 | fautomerge | fautomerge | |
原菜单JSON | fyuan | fyuan | |
修改后菜单JSON | fxiugai | fxiugai | |
版本 | fbanben | fbanben |
菜单 JSON 来自 /entry/manager/menus 请求返回的 JSON
[{
"title": "菜单目录", //目录名称
"hidden": " ", //是否隐藏,空格表示显示,all 表示隐藏
"children": [{ //包括的菜单
ext: "{}" //扩展信息
types: ["pcx", "func"] //菜单类型
icon: "AccountBookOutlined" //菜单图标
color: "#3494F8" //菜单颜色
title: "组织管理" //菜单名称
originUrl: "/entry/opm-mobileapp/opm-mobile/org.w" //原始 url,即 serviceMetaInfo 中定义的 url
url: "/entry/opm-pcapp/opm-pc/org.w" //当前运行环境的 url,桌面端和移动端不同
hidden: " ", //是否隐藏,空格表示显示,all 表示隐藏
mode: 0 //0表示内部页面,-2表示外部页面
}]
}]
保存菜单(包括服务注册或刷新)后,将 serviceMetaInfo 中的菜单信息写入 manager_service 表
manager_service 的结构如下
列 | 模型名 | 字段名 | 说明 |
---|---|---|---|
主键 | id | id | |
显示名称 | label | label | 服务标签 |
服务地址 | address | address | |
根路径 | name | name | 服务名 |
菜单信息 | menu | menu | 服务的菜单信息 |
子路由 | subroutes | subroutes | |
顺序值 | order_number | order_number | |
服务类型 | type | type | |
网关配置 | gatewayConfig | gateway_config | |
附件信息 | extInfo | ext_info | |
最后修改时间 | lastModifiedDate | last_modified_date | |
外部服务密钥 | apisecret | apisecret | |
版本 | version | version |