统一权限#
arkid支持第三方应用,通过输出自身的接口文档,arkid这边通过读取应用本身接口文档,可以在arkid中方便灵活的管理权限。
接入步骤#
1.需要准备一个可以读取的openapi.json访问地址,json中至少要有permissions节点,permissions中要含有基础的角色信息,以及接口信息。下面提供了一个含有permissions节点的例子,可以作为参考:
{
    "permissions":[
        {
            "name":"customer",
            "sort_id":0,
            "type":"group",
            "container":[
                3,
                6
            ]
        },
        {
            "name":"tenant-admin",
            "sort_id":1,
            "type":"group",
            "container":[
                4
            ]
        },
        {
            "name":"platform-admin",
            "sort_id":2,
            "type":"group",
            "container":[
                5
            ]
        },
        {
            "name":"app列表",
            "sort_id":3,
            "type":"api",
            "container":[
            ],
            "operation_id":"api_v1_views_app_list_apps"
        },
        {
            "name":"创建应用",
            "sort_id":4,
            "type":"api",
            "container":[
            ],
            "operation_id":"api_v1_views_app_create_app"
        },
        {
            "name":"公开app列表",
            "sort_id":5,
            "type":"api",
            "container":[
            ],
            "operation_id":"api_v1_views_app_list_open_apps"
        },
        {
            "name":"获取app",
            "sort_id":6,
            "type":"api",
            "container":[
            ],
            "operation_id":"api_v1_views_app_get_app"
        }
    ]
}
| 参数名称 | 参数说明 | 
|---|---|
| name | 名称 | 
| sort_id | 排序id(开发者自行生成) | 
| type | 类型(api 或 group) | 
| container | 包含接口的sort_id(只有在group类型中才有值) | 
| operation_id | 操作id(只有api类型才有这个字段) | 
2.需要在应用管理菜单下的应用列表,新建一个应用
3.需要对应用进行协议配置,这里以OIDC类型的应用为例
4.需要对应用进行开放API配置
如何使用#
1.可以在权限管理菜单下,授权管理菜单下的所有应用页面中,把已经读取到的权限,授权给其它租户的人使用。
补充说明
权限的分配是逐级向下的,一般授权开启时,除要开启的权限外,会打开应用入口权限,防止其它租户的用户无法进行登录
授权开启:该权限被授权给其它租户使用,其它租户的管理员是最先拥有该权限的,其它租户管理员可以对自己拥有的权限进行二次分配。
授权关闭:该权限如果从开启状态切换到关闭状态,则已经分配给其它租户的权限,将被收回,包括其它租户二次分配的。
2.除了授权给其它租户使用外,也可以在本租户内,进行用户权限赋予
如何获取用户的权限字符串#
1.访问应用列表,编辑应用,获取参数信息
| 英文参数名称 | 对应页面字段 | 
|---|---|
| redirect url | 回调地址 | 
| client_id | 客户端id | 
| client_token | 客户端秘钥 | 
| authorize url | 授权url | 
| get token url | 获取access_token地址 | 
| userinfo url | 用户信息地址 | 
| logout url | 退出登录地址 | 
2.获取Authorization Code
- 请求地址: authorize url
- 请求方式: GET
- 请求参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| client_id | client_id | |
| redirect_uri | redirect url | |
| response_type | 填入code | code | 
| scope | 填入 (openid userinfo) | 
- 请求示例: http://authorize url/?client_id=xxxxx&redirect_uri=xxxxx&response_type=code&scope=userinfo
- 返回参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| code | 授权码 | 
- 返回示例: http://redirect_uri?code=XEV8esOvaVk9wyAuiNXpb3Nuwn5av9&token=cd34840ffc804b894ede31bc21b176ef559e137f
3.获取Access Token
- 请求地址: get token url
- 请求方式: POST
- 请求头参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| Authorization | token格式为 client_id:client_secret 使用base64编码 | Basic Token | 
| Content-Type | 填入multipart/form-data | 
- 请求参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| code | 授权码 | |
| grant_type | 填入authorization_code | 
- 请求示例:
- 返回参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| access_token | 令牌 | |
| expires_in | 过期时间 | |
| token_type | Bearer | |
| scope | userinfo openid | |
| refresh_token | 用于更新令牌的令牌 | |
| id_token | id_token | 
- 返回示例: 
{ "access_token": "nRmo1Ko5UbStrtBNtySnUi8Ezw9YBm", "expires_in": 36000, "token_type": "Bearer", "scope": "openid userinfo", "refresh_token": "na3bP6WX3JzZynqLSJS8wI4m6zWiC9", "id_token": "eyJhbGciOiAiUlMyNTYiLCAidXNlIjogInNpZyIsICJraWQiOiAiRjlYSlg3N0VkTjVnNnA5Q3ZnS1NnTW9GRTh4cjNJeWp6aUNLTnR3enhWTSIsICJlIjogIkFRQUIiLCAia3R5IjogIlJTQSIsICJuIjogImlFNFkyMDhLV0x1QzhLcWZLQU96NmctaUlfeHNLU3hTYmoyMWxXbmdnMmwtay01b2ZKaVRDQklKZjFTR1dyQ3hfRXNGT1ptZUxEM29xcE96WUNhdFZ3NlBlNnVacFJhRFZSekFoOV9Da00waUFWclc2bHB4QkowSFlxZ1d3cHBpSG15M2VEbkg2V3lGVkNQUFhKd3F1MU5ETlludENqcUtWa2gxamotdjktVSJ9.eyJhdWQiOiAiQXJkeHJwajVVb0JmUUNiN1F4TDE1RG9YR2ozcHpOeHFkeFl2U1YxeCIsICJpYXQiOiAxNjYwMTE1MDU4LCAiYXRfaGFzaCI6ICJqa19ET1M0MFNnT3Fubk91QzhjeHdnIiwgInN1YiI6ICJmYWY1YWFlNi0zY2RmLTQ1OTUtOGI0YS0zYTA2YjMxMTE3YzgiLCAic3ViX2lkIjogImZhZjVhYWU2LTNjZGYtNDU5NS04YjRhLTNhMDZiMzExMTdjOCIsICJwcmVmZXJyZWRfdXNlcm5hbWUiOiAiYWRtaW4iLCAiZ3JvdXBzIjogWyJ0ZW5hbnRfYWRtaW4iXSwgInRlbmFudF9pZCI6ICI0ZGExMTRjZS1lMTE1LTQ0YTAtODIzYi1kMzcyMTE0NDI1ZDAiLCAidGVuYW50X3NsdWciOiAiIiwgImlzcyI6ICJodHRwOi8vbG9jYWxob3N0OjgwMDAvYXBpL3YxL3RlbmFudC80ZGExMTRjZS1lMTE1LTQ0YTAtODIzYi1kMzcyMTE0NDI1ZDAiLCAiZXhwIjogMTY2MDE1MTA1OCwgImF1dGhfdGltZSI6IDE2NjAxMTUwNTh9.Xcz9d79UdPAVtiObwkauIPVodQtDK8ZX9zYBhTgmjs5_lQhlgzCeUZPeUJCsIb_3AR9BChDw_EDYzwFhg1h4vYofYlRk4V9wHZypbRoDFopm343h78JbzGeexFiRhE_e4zIPmVsQj925TpMuMOP4zLKX3U6pTPJETflrvblXcUs" }
4.获取权限字符串
- 请求地址: /api/v1/app/permission_result
- 请求方式: GET
- 请求头参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| ID-TOKEN | 获取access_token接口返回的id_token | xxxxx | 
- 返回参数:
| 参数名称 | 参数说明 | 示例 | 
|---|---|---|
| result | 用户权限字符串(1是有权限,0是没权限,每位与接口文档中的sort_id对应) | 
- 返回示例:






