动态权限

权限是根据授权主体查找的,动态添加授权主体,即可获得动态权限

  • 授权主体包括两部分
    • 静态授权主体:根据组织进行的权限分配
    • 动态授权主体:用户在请求上带上 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 配置秘钥

1719221146118

示例:赋予 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 的权限。当前上下文的所有相关权限会自动加载并计算

1719223457542

发送请求时,系统自动添加了请求标头 x-credential-subject-info,权限服务验证权限后,允许调用

1719223353843

results matching ""

    No results matching ""