动态权限
权限是根据授权主体查找的,动态添加授权主体,即可获得动态权限
- 授权主体包括两部分
- 静态授权主体:根据组织进行的权限分配
- 动态授权主体:用户在请求上带上 x-credential-subject-info 请求标头,指定当前请求属于哪些授权主体
- 权限服务根据静态和动态权限合并出当前的所有权限集合
- 动态权限只在当前页面有效,关闭页面后,重新打开,没有上次获得的动态权限
上下文组件提供改变上下文方法 changeContext,实现在当前人权限的基础上,叠加其它授权主体的权限,实现动态权限。方法定义如下
方法:
changeContext(contextKey="default",signature)
参数:
contextKey:授权主体
* 默认为静态权限上下文:default
* 用户可以切换到动态上下文,值为授权主体 ID (authorize 表中的 subject_id 列)列表,多个授权主体使用逗号分隔
signature:签名
* 切换上下文可以获得更大权限,所以需要校验安全性,签名规则为:md5(contextKey + 秘钥),签名合法才能够添加动态权限,签名校验在后台 API 的权限判断中进行
* 秘钥:默认为企业门户应用的 appSecret
* 查看默认秘钥:进入“应用服务管理-企业门户-监控-POD 终端-tomcat”,查看 /usr/local/x5/conf/env.sh 文件中 PORTAL_APP_SECRET 值,查询命令:cat /usr/local/x5/conf/env.sh | grep PORTAL_APP_SECRET,如下图所示
* 支持自定义秘钥:通过配置企业门户应用的环境变量 COMP_AUTHORIZE_SUBJECTINFO_KEY 配置秘钥
示例:赋予 system 的权限,md5加密请参考《JS-SDK》,代码如下
import MD5 from "$UI/wxsys/lib/base/md5";
onDynamicBtnClick = (event) => {
let subjectId="system";//多个用逗号分隔
this.comp('wxContext0').changeContext(subjectId,new MD5().hex_md5(subjectId+"应用密钥"));
}
获得 system 的权限后,已授权的权限返回 system 的权限。当前上下文的所有相关权限会自动加载并计算
发送请求时,系统自动添加了请求标头 x-credential-subject-info,权限服务验证权限后,允许调用