This is an automated email from the ASF dual-hosted git repository.

nicholasjiang pushed a commit to branch branch-0.1
in repository https://gitbox.apache.org/repos/asf/paimon-webui.git

commit 5e820af3eb7881782daeb9036bdf2653c183ec66
Author: s7monk <[email protected]>
AuthorDate: Tue Jul 9 20:02:20 2024 +0800

    [Improvement] Support indeterminate keys with the permission configuration 
of role creation (#474)
---
 .../apache/paimon/web/server/data/model/SysRole.java |  4 ++++
 .../web/server/service/impl/SysRoleServiceImpl.java  | 20 +++++++++++++++-----
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/SysRole.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/SysRole.java
index 47754a4d..e037ccd8 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/SysRole.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/data/model/SysRole.java
@@ -63,6 +63,10 @@ public class SysRole extends BaseModel {
     @NotEmpty(message = "invalid.menuIds")
     private Integer[] menuIds;
 
+    /** indeterminate keys. */
+    @TableField(exist = false)
+    private Integer[] indeterminateKeys;
+
     /** Role menu permissions. */
     @TableField(exist = false)
     private Set<String> permissions;
diff --git 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysRoleServiceImpl.java
 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysRoleServiceImpl.java
index 2cf0a867..aa3bbb6e 100644
--- 
a/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysRoleServiceImpl.java
+++ 
b/paimon-web-server/src/main/java/org/apache/paimon/web/server/service/impl/SysRoleServiceImpl.java
@@ -195,22 +195,32 @@ public class SysRoleServiceImpl extends 
ServiceImpl<SysRoleMapper, SysRole>
      * @param role role info
      */
     public int insertRoleMenu(SysRole role) {
+        Integer[] mergedMenuIds = mergeMenuIds(role.getMenuIds(), 
role.getIndeterminateKeys());
         int rows = 1;
-        if (role.getMenuIds() != null && role.getMenuIds().length > 0) {
+        if (mergedMenuIds.length > 0) {
             List<RoleMenu> list = new ArrayList<RoleMenu>();
-            for (Integer menuId : role.getMenuIds()) {
+            for (Integer menuId : mergedMenuIds) {
                 RoleMenu rm = new RoleMenu();
                 rm.setRoleId(role.getId());
                 rm.setMenuId(menuId);
                 list.add(rm);
             }
-            if (list.size() > 0) {
-                rows = roleMenuMapper.batchRoleMenu(list);
-            }
+            rows = roleMenuMapper.batchRoleMenu(list);
         }
         return rows;
     }
 
+    private Integer[] mergeMenuIds(Integer[] menuIds, Integer[] 
indeterminateKeys) {
+        Set<Integer> mergedSet = new HashSet<>();
+        if (menuIds != null) {
+            mergedSet.addAll(Arrays.asList(menuIds));
+        }
+        if (indeterminateKeys != null) {
+            mergedSet.addAll(Arrays.asList(indeterminateKeys));
+        }
+        return mergedSet.toArray(new Integer[0]);
+    }
+
     /**
      * Delete role.
      *

Reply via email to