作者:yx
文章目录
- 前言
- 一、内置权限
- 二、自定义权限(11.1.0及以后版本)
- 1、修改配置文件
- 2、页面展示
- 3、api调用
- 4、结果验证
- 5、实际应用
前言
iPortal 用户访问和使用门户中资源的能力取决于其用户类型与在门户中拥有的权限,权限通过角色分配给用户,基于角色实现对门户资源的访问控制。有关 iPortal 的权限可以分为内置权限和自定义权限。接下来一起看看吧!
一、内置权限
SuperMap iPortal中的内置权限按照模块、资源、操作的不同划分到了非常小的颗粒度。权限划分请参考:角色管理。方便用户根据业务需要,为自定义角色分配充分且必要的权限集合。
二、自定义权限(11.1.0及以后版本)
用户扩展的开发成果如何进行权限控制呢?例如:前端扩展页面要根据自定义权限来控制UI的显隐,后端自定义RestAPI 要根据自定义权限控制 RestAPI 是否有权访问。在这种情况下,用户可扩展细粒度权限控制项来实现。从11.1.0版本开始iPortal支持自定义权限。
1、修改配置文件
编辑 %SuperMap iPortal_HOME%\webapps\iportal\resources\admin-ui\extend
目录中的 permissions.json
文件,将自定义权限表达式以 json 格式写入。该文件可以在角色管理的权限列表中增加针对访问扩展页面的权限设置项,支持中文、英文两种语言,示例如下:
{
"permissions":[
{
"permission": "portal:custom:admin:extendsPage:viewPage1",
"label": {
"zh": "查看iframe扩展示例页面",
"en": "View iframe extends page"
}
}
]
}
参数介绍:
-
permissions:权限数组
-
permission:单个权限名, 权限表达式的定义格式 需要和 系统内置权限表达式 加以区分,具体建议如下:
- 自定义常规权限格式:portal:custom:user:xxx
- 自定义管理权限格式:portal:custom:admin:xxx
-
label:该权限在角色管理权限列表中的说明。其中 zh 为中文环境下的说明,en 为英文环境下的说明
-
2、页面展示
保存后,以管理员身份登录 iPortal,即可在管理页面添加角色时看到扩展的内容,如下图所示:
3、api调用
新建的角色绑定扩展的权限保存后,将该角色分配给用户A,用户A就具备了该权限。调用userprofile接口即可查询当前用户的用户级配置信息,其中modulePermissions字段记录了该用户的权限信息。
userProfile接口介绍如下:
通过对 userProfile 资源发送 GET 请求,可以查询当前用户的用户级配置信息。用户级配置信息包括用户名、用户昵称、用户的类型、用户的角色、用户拥有的权限、用户具有编辑使用权限的 WebApps 等。
GET请求 | 查看当前用户的用户级配置信息 |
---|---|
请求参数 | scope:指定查询的用户级配置信息项。 如果未设置,则返回当前用户所有的用户级配置信息,设置参数后,会返回指定的配置信息,请求参数必须包含在 URI 中。参数类型:String[] |
响应结构 | 1)userName:用户名。参数类型:String 2)nickName:用户的昵称。参数类型:String 3)type:用户的类型。包括创建者 “CREATOR” 和查看者 “VIEWER” 两类。参数类型:String 4)theme:用户设置的偏好主题。默认使用管理员配置好的默认主题。参数类型:String 5)roles:用户分配的角色。参数类型:String[] 6)modulePermissions:用户所拥有的权限。参数类型:String[] 7)editableWebApps:用户具有使用权限的 WebApps。参数类型:String[] |
4、结果验证
这里以postman发请求为例,截图中可以发现设置的自定义权限生效了
5、实际应用
有关前端如何使用自定义权限表达式请参考:案例1—以 iFrame 形式扩展新的管理页面,后端自定义RestAPI 判断当前用户有没有某个(自定义)权限,可以通过下面一句代码进行判断。
boolean isPermitted = ThreadContext.getSubject().isPermitted("portal:custom:admin:extendsPage:viewPage1");