From 630c571f28447dbeafdd35885f5509d4d9e21781 Mon Sep 17 00:00:00 2001 From: tomsun28 Date: Sun, 17 Apr 2022 21:30:26 +0800 Subject: [PATCH] [monitor]feature: support roles permission, admin-user-guest (#101) --- home/docs/start/docker-deploy.md | 148 +++++++++++------- home/docs/start/package-deploy.md | 43 ++--- .../options.json | 14 ++ manager/src/main/resources/sureness.yml | 44 +++++- script/docker-compose/conf/sureness.yml | 48 ++++-- script/sureness.yml | 46 ++++-- .../core/interceptor/default.interceptor.ts | 10 +- 7 files changed, 245 insertions(+), 108 deletions(-) create mode 100644 home/i18n/en/docusaurus-plugin-content-blog/options.json diff --git a/home/docs/start/docker-deploy.md b/home/docs/start/docker-deploy.md index e034326..cfab117 100644 --- a/home/docs/start/docker-deploy.md +++ b/home/docs/start/docker-deploy.md @@ -48,72 +48,102 @@ sidebar_label: Docker方式部署 配置文件内容参考 项目仓库[/script/sureness.yml](https://gitee.com/dromara/hertzbeat/blob/master/script/sureness.yml) ```yaml - - resourceRole: - - /account/auth/refresh===post===[role1,role2,role3,role4] - - excludedResource: - - /account/auth/**===* - - /===get - - /i18n/**===get - - /apps/hierarchy===get - - /console/**===get - - /**/*.html===get - - /**/*.js===get - - /**/*.css===get - - /**/*.ico===get - - /**/*.ttf===get - - /**/*.png===get - - /**/*.gif===get + +resourceRole: +- /account/auth/refresh===post===[admin,user,guest] +- /apps/**===get===[admin,user,guest] +- /monitor/**===get===[admin,user,guest] +- /monitor/**===post===[admin,user] +- /monitor/**===put===[admin,user] +- /monitor/**===delete==[admin] +- /monitors/**===get===[admin,user,guest] +- /monitors/**===post===[admin,user] +- /monitors/**===put===[admin,user] +- /monitors/**===delete===[admin] +- /alert/**===get===[admin,user,guest] +- /alert/**===post===[admin,user] +- /alert/**===put===[admin,user] +- /alert/**===delete===[admin] +- /alerts/**===get===[admin,user,guest] +- /alerts/**===post===[admin,user] +- /alerts/**===put===[admin,user] +- /alerts/**===delete===[admin] +- /notice/**===get===[admin,user,guest] +- /notice/**===post===[admin,user] +- /notice/**===put===[admin,user] +- /notice/**===delete===[admin] +- /summary/**===get===[admin,user,guest] +- /summary/**===post===[admin,user] +- /summary/**===put===[admin,user] +- /summary/**===delete===[admin] + +excludedResource: +- /account/auth/**===* +- /===get +- /i18n/**===get +- /apps/hierarchy===get +# web ui 静态资源 +- /console/**===get +- /**/*.html===get +- /**/*.js===get +- /**/*.css===get +- /**/*.ico===get +- /**/*.ttf===get +- /**/*.png===get +- /**/*.gif===get - /**/*.png===* - - /swagger-resources/**===get - - /v2/api-docs===get - - /v3/api-docs===get - - # 用户账户信息 - # 下面有 admin tom lili 三个账户 - # eg: admin 拥有[role1,role2]角色,密码为admin - # eg: tom 拥有[role1,role2,role3],密码为tom@123 - # eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 - account: - - appId: admin - credential: admin - role: [role1,role2] - - appId: tom - credential: tom@123 - role: [role1,role2,role3] - - appId: lili - # 注意 Digest认证不支持加盐加密的密码账户 - # 加盐加密的密码,通过 MD5(password+salt)计算 - # 此账户的原始密码为 lili - credential: 1A676730B0C7F54654B0E09184448289 - salt: 123 - role: [role1,role2] +# swagger ui 资源 +- /swagger-resources/**===get +- /v2/api-docs===get +- /v3/api-docs===get + +account: +- appId: admin + credential: admin + role: [admin,user] +- appId: tom + credential: tom@123 + role: [user] +- appId: guest + credential: guest + role: [guest] +- appId: lili + # 注意 Digest认证不支持加盐加密的密码账户 + # 加盐加密的密码,通过 MD5(password+salt)计算 + # 此账户的原始密码为 lili + credential: 1A676730B0C7F54654B0E09184448289 + salt: 123 + role: [guest] + ``` 修改sureness.yml的如下**部分参数**:**[注意⚠️sureness配置的其它默认参数需保留]** ```yaml - # 用户账户信息 - # 下面有 admin tom lili 三个账户 - # eg: admin 拥有[role1,role2]角色,密码为admin - # eg: tom 拥有[role1,role2,role3],密码为tom@123 - # eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 - account: - - appId: admin - credential: admin - role: [role1,role2] - - appId: tom - credential: tom@123 - role: [role1,role2,role3] - - appId: lili - # 注意 Digest认证不支持加盐加密的密码账户 - # 加盐加密的密码,通过 MD5(password+salt)计算 - # 此账户的原始密码为 lili - credential: 1A676730B0C7F54654B0E09184448289 - salt: 123 - role: [role1,role2] +# 用户账户信息 +# 下面有 admin tom lili 三个账户 +# eg: admin 拥有[admin,user]角色,密码为admin +# eg: tom 拥有[user],密码为tom@123 +# eg: lili 拥有[guest],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 +account: +- appId: admin + credential: admin + role: [admin,user] +- appId: tom + credential: tom@123 + role: [user] +- appId: guest + credential: guest + role: [guest] +- appId: lili + # 注意 Digest认证不支持加盐加密的密码账户 + # 加盐加密的密码,通过 MD5(password+salt)计算 + # 此账户的原始密码为 lili + credential: 1A676730B0C7F54654B0E09184448289 + salt: 123 + role: [guest] + ``` 6. 启动HertzBeat Docker容器 diff --git a/home/docs/start/package-deploy.md b/home/docs/start/package-deploy.md index 224d54a..9712236 100644 --- a/home/docs/start/package-deploy.md +++ b/home/docs/start/package-deploy.md @@ -51,25 +51,30 @@ sidebar_label: 安装包方式部署 修改sureness.yml的如下**部分参数**:**[注意⚠️sureness配置的其它默认参数需保留]** ```yaml - # 用户账户信息 - # 下面有 admin tom lili 三个账户 - # eg: admin 拥有[role1,role2]角色,密码为admin - # eg: tom 拥有[role1,role2,role3],密码为tom@123 - # eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 - account: - - appId: admin - credential: admin - role: [role1,role2] - - appId: tom - credential: tom@123 - role: [role1,role2,role3] - - appId: lili - # 注意 Digest认证不支持加盐加密的密码账户 - # 加盐加密的密码,通过 MD5(password+salt)计算 - # 此账户的原始密码为 lili - credential: 1A676730B0C7F54654B0E09184448289 - salt: 123 - role: [role1,role2] + +# 用户账户信息 +# 下面有 admin tom lili 三个账户 +# eg: admin 拥有[admin,user]角色,密码为admin +# eg: tom 拥有[user],密码为tom@123 +# eg: lili 拥有[guest],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 +account: +- appId: admin + credential: admin + role: [admin,user] +- appId: tom + credential: tom@123 + role: [user] +- appId: guest + credential: guest + role: [guest] +- appId: lili + # 注意 Digest认证不支持加盐加密的密码账户 + # 加盐加密的密码,通过 MD5(password+salt)计算 + # 此账户的原始密码为 lili + credential: 1A676730B0C7F54654B0E09184448289 + salt: 123 + role: [guest] + ``` 5. 部署启动 diff --git a/home/i18n/en/docusaurus-plugin-content-blog/options.json b/home/i18n/en/docusaurus-plugin-content-blog/options.json new file mode 100644 index 0000000..bdb1643 --- /dev/null +++ b/home/i18n/en/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "Blog", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "Blog", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "Recent posts", + "description": "The label for the left sidebar" + } +} \ No newline at end of file diff --git a/manager/src/main/resources/sureness.yml b/manager/src/main/resources/sureness.yml index 90506ec..17e2ef9 100644 --- a/manager/src/main/resources/sureness.yml +++ b/manager/src/main/resources/sureness.yml @@ -2,10 +2,35 @@ # 加载到匹配字典的资源,也就是需要被保护的,设置了所支持角色访问的资源 # 没有配置的资源也默认被认证保护,但不鉴权 -# eg: /api/v1/source1===get===[role2] 表示 /api/v2/host===post 这条资源支持 role2 这一种角色访问 +# eg: /api/v1/source1===get===[admin] 表示 /api/v2/host===post 这条资源支持 admin 这一种角色访问 # eg: /api/v1/source2===get===[] 表示 /api/v1/source2===get 这条资源不支持任何角色访问 resourceRole: - - /account/auth/refresh===post===[role1,role2,role3,role4] + - /account/auth/refresh===post===[admin,user,guest] + - /apps/**===get===[admin,user,guest] + - /monitor/**===get===[admin,user,guest] + - /monitor/**===post===[admin,user] + - /monitor/**===put===[admin,user] + - /monitor/**===delete==[admin] + - /monitors/**===get===[admin,user,guest] + - /monitors/**===post===[admin,user] + - /monitors/**===put===[admin,user] + - /monitors/**===delete===[admin] + - /alert/**===get===[admin,user,guest] + - /alert/**===post===[admin,user] + - /alert/**===put===[admin,user] + - /alert/**===delete===[admin] + - /alerts/**===get===[admin,user,guest] + - /alerts/**===post===[admin,user] + - /alerts/**===put===[admin,user] + - /alerts/**===delete===[admin] + - /notice/**===get===[admin,user,guest] + - /notice/**===post===[admin,user] + - /notice/**===put===[admin,user] + - /notice/**===delete===[admin] + - /summary/**===get===[admin,user,guest] + - /summary/**===post===[admin,user] + - /summary/**===put===[admin,user] + - /summary/**===delete===[admin] # 需要被过滤保护的资源,不认证鉴权直接访问 # /api/v1/source3===get 表示 /api/v1/source3===get 可以被任何人访问 无需登录认证鉴权 @@ -31,20 +56,23 @@ excludedResource: # 用户账户信息 # 下面有 admin tom lili 三个账户 -# eg: admin 拥有[role1,role2]角色,密码为admin -# eg: tom 拥有[role1,role2,role3],密码为tom@123 -# eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 +# eg: admin 拥有[admin,user]角色,密码为admin +# eg: tom 拥有[user],密码为tom@123 +# eg: lili 拥有[guest],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 account: - appId: admin credential: admin - role: [role1,role2] + role: [admin,user] - appId: tom credential: tom@123 - role: [role1,role2,role3] + role: [user] + - appId: guest + credential: guest + role: [guest] - appId: lili # 注意 Digest认证不支持加盐加密的密码账户 # 加盐加密的密码,通过 MD5(password+salt)计算 # 此账户的原始密码为 lili credential: 1A676730B0C7F54654B0E09184448289 salt: 123 - role: [role1,role2] + role: [guest] diff --git a/script/docker-compose/conf/sureness.yml b/script/docker-compose/conf/sureness.yml index cc02217..17e2ef9 100644 --- a/script/docker-compose/conf/sureness.yml +++ b/script/docker-compose/conf/sureness.yml @@ -2,10 +2,35 @@ # 加载到匹配字典的资源,也就是需要被保护的,设置了所支持角色访问的资源 # 没有配置的资源也默认被认证保护,但不鉴权 -# eg: /api/v1/source1===get===[role2] 表示 /api/v2/host===post 这条资源支持 role2 这一种角色访问 +# eg: /api/v1/source1===get===[admin] 表示 /api/v2/host===post 这条资源支持 admin 这一种角色访问 # eg: /api/v1/source2===get===[] 表示 /api/v1/source2===get 这条资源不支持任何角色访问 resourceRole: - - /account/auth/refresh===post===[role1,role2,role3,role4] + - /account/auth/refresh===post===[admin,user,guest] + - /apps/**===get===[admin,user,guest] + - /monitor/**===get===[admin,user,guest] + - /monitor/**===post===[admin,user] + - /monitor/**===put===[admin,user] + - /monitor/**===delete==[admin] + - /monitors/**===get===[admin,user,guest] + - /monitors/**===post===[admin,user] + - /monitors/**===put===[admin,user] + - /monitors/**===delete===[admin] + - /alert/**===get===[admin,user,guest] + - /alert/**===post===[admin,user] + - /alert/**===put===[admin,user] + - /alert/**===delete===[admin] + - /alerts/**===get===[admin,user,guest] + - /alerts/**===post===[admin,user] + - /alerts/**===put===[admin,user] + - /alerts/**===delete===[admin] + - /notice/**===get===[admin,user,guest] + - /notice/**===post===[admin,user] + - /notice/**===put===[admin,user] + - /notice/**===delete===[admin] + - /summary/**===get===[admin,user,guest] + - /summary/**===post===[admin,user] + - /summary/**===put===[admin,user] + - /summary/**===delete===[admin] # 需要被过滤保护的资源,不认证鉴权直接访问 # /api/v1/source3===get 表示 /api/v1/source3===get 可以被任何人访问 无需登录认证鉴权 @@ -31,20 +56,23 @@ excludedResource: # 用户账户信息 # 下面有 admin tom lili 三个账户 -# eg: admin 拥有[role1,role2]角色,密码为admin -# eg: tom 拥有[role1,role2,role3],密码为tom@123 -# eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 +# eg: admin 拥有[admin,user]角色,密码为admin +# eg: tom 拥有[user],密码为tom@123 +# eg: lili 拥有[guest],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 account: - appId: admin credential: admin - role: [role1,role2] + role: [admin,user] - appId: tom - credential: tom - role: [role1,role2,role3] + credential: tom@123 + role: [user] + - appId: guest + credential: guest + role: [guest] - appId: lili # 注意 Digest认证不支持加盐加密的密码账户 # 加盐加密的密码,通过 MD5(password+salt)计算 # 此账户的原始密码为 lili - credential: 1A676730B0C7F54654B0E09194448289 + credential: 1A676730B0C7F54654B0E09184448289 salt: 123 - role: [role1,role2] + role: [guest] diff --git a/script/sureness.yml b/script/sureness.yml index aaa1f2f..17e2ef9 100644 --- a/script/sureness.yml +++ b/script/sureness.yml @@ -2,10 +2,35 @@ # 加载到匹配字典的资源,也就是需要被保护的,设置了所支持角色访问的资源 # 没有配置的资源也默认被认证保护,但不鉴权 -# eg: /api/v1/source1===get===[role2] 表示 /api/v2/host===post 这条资源支持 role2 这一种角色访问 +# eg: /api/v1/source1===get===[admin] 表示 /api/v2/host===post 这条资源支持 admin 这一种角色访问 # eg: /api/v1/source2===get===[] 表示 /api/v1/source2===get 这条资源不支持任何角色访问 resourceRole: - - /account/auth/refresh===post===[role1,role2,role3,role4] + - /account/auth/refresh===post===[admin,user,guest] + - /apps/**===get===[admin,user,guest] + - /monitor/**===get===[admin,user,guest] + - /monitor/**===post===[admin,user] + - /monitor/**===put===[admin,user] + - /monitor/**===delete==[admin] + - /monitors/**===get===[admin,user,guest] + - /monitors/**===post===[admin,user] + - /monitors/**===put===[admin,user] + - /monitors/**===delete===[admin] + - /alert/**===get===[admin,user,guest] + - /alert/**===post===[admin,user] + - /alert/**===put===[admin,user] + - /alert/**===delete===[admin] + - /alerts/**===get===[admin,user,guest] + - /alerts/**===post===[admin,user] + - /alerts/**===put===[admin,user] + - /alerts/**===delete===[admin] + - /notice/**===get===[admin,user,guest] + - /notice/**===post===[admin,user] + - /notice/**===put===[admin,user] + - /notice/**===delete===[admin] + - /summary/**===get===[admin,user,guest] + - /summary/**===post===[admin,user] + - /summary/**===put===[admin,user] + - /summary/**===delete===[admin] # 需要被过滤保护的资源,不认证鉴权直接访问 # /api/v1/source3===get 表示 /api/v1/source3===get 可以被任何人访问 无需登录认证鉴权 @@ -23,7 +48,7 @@ excludedResource: - /**/*.ttf===get - /**/*.png===get - /**/*.gif===get - - /**/*.png===* + - /**/*.png===* # swagger ui 资源 - /swagger-resources/**===get - /v2/api-docs===get @@ -31,20 +56,23 @@ excludedResource: # 用户账户信息 # 下面有 admin tom lili 三个账户 -# eg: admin 拥有[role1,role2]角色,密码为admin -# eg: tom 拥有[role1,role2,role3],密码为tom@123 -# eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 +# eg: admin 拥有[admin,user]角色,密码为admin +# eg: tom 拥有[user],密码为tom@123 +# eg: lili 拥有[guest],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289 account: - appId: admin credential: admin - role: [role1,role2] + role: [admin,user] - appId: tom credential: tom@123 - role: [role1,role2,role3] + role: [user] + - appId: guest + credential: guest + role: [guest] - appId: lili # 注意 Digest认证不支持加盐加密的密码账户 # 加盐加密的密码,通过 MD5(password+salt)计算 # 此账户的原始密码为 lili credential: 1A676730B0C7F54654B0E09184448289 salt: 123 - role: [role1,role2] + role: [guest] diff --git a/web-app/src/app/core/interceptor/default.interceptor.ts b/web-app/src/app/core/interceptor/default.interceptor.ts index 3edf55e..551855e 100644 --- a/web-app/src/app/core/interceptor/default.interceptor.ts +++ b/web-app/src/app/core/interceptor/default.interceptor.ts @@ -26,8 +26,8 @@ const CODE_MESSAGE: { [key: number]: string } = { 202: '一个请求已经进入后台排队(异步任务)。', 204: '删除数据成功。', 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。', - 401: '用户没有权限(令牌、用户名、密码错误)。', - 403: '用户无权限访问此资源。', + 401: '用户认证信息异常。', + 403: '用户无此操作权限。', 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。', 406: '请求的格式不可得。', 409: '请求与服务器端目标资源的当前状态相冲突', @@ -65,7 +65,11 @@ export class DefaultInterceptor implements HttpInterceptor { private checkStatus(ev: HttpResponseBase): void { const errorText = CODE_MESSAGE[ev.status] || ev.statusText; console.warn(` ${ev.status}: ${ev.url}`, errorText); - this.notification.error(` ${ev.status}: ${ev.url}`, errorText); + if (ev.status == 403) { + this.notification.error(` ${ev.status}: ${errorText}`, ''); + } else { + this.notification.error(` ${ev.status}: ${ev.url}`, errorText); + } } /**