瀏覽代碼

[monitor]feature: support roles permission, admin-user-guest (#101)

tomsun28 3 年之前
父節點
當前提交
630c571f28

+ 89 - 59
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容器  

+ 24 - 19
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. 部署启动

+ 14 - 0
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"
+  }
+}

+ 36 - 8
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]

+ 38 - 10
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]

+ 37 - 9
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]

+ 7 - 3
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);
+    }
   }
 
   /**