refactor: 重构授权管理代码
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnAccountController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java
similarity index 86%
rename from base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnAccountController.java
rename to base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java
index d74416c..291a80b 100644
--- a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnAccountController.java
+++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/controller/authn/AuthnController.java
@@ -20,21 +20,23 @@
 import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnAccountResourcesResponseData;
 import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnAccountResponseData;
 import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnAccountRolesResponseData;
+import com.supwisdom.institute.backend.base.api.v1.vo.response.AuthnResourceRoleListResponseData;
 import com.supwisdom.institute.backend.base.domain.entity.Account;
 import com.supwisdom.institute.backend.base.domain.entity.Permission;
 import com.supwisdom.institute.backend.base.domain.entity.Resource;
 import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.base.domain.model.ResourceRoleSet;
 import com.supwisdom.institute.backend.base.domain.service.AccountService;
 import com.supwisdom.institute.backend.base.domain.service.PermissionService;
 import com.supwisdom.institute.backend.base.domain.service.ResourceService;
 import com.supwisdom.institute.backend.base.domain.service.RoleService;
 import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
 
-@Api(value = "BaseAuthnAccount", tags = { "BaseAuthnAccount" }, description = "帐号接口(认证、授权用)")
+@Api(value = "BaseAuthn", tags = { "BaseAuthn" }, description = "认证授权接口")
 @Slf4j
 @RestController
 @RequestMapping("/v1/authn")
-public class AuthnAccountController {
+public class AuthnController {
   
   @Autowired
   private AccountService accountService;
@@ -69,11 +71,10 @@
     return new DefaultApiResponse<AuthnAccountResponseData>(data);
   }
   
-  
   @GetMapping(path = "/{username}/roles", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
   @ResponseBody
-  public DefaultApiResponse<AuthnAccountRolesResponseData> roles(
+  public DefaultApiResponse<AuthnAccountRolesResponseData> accountRoles(
       @PathVariable("username") String username) {
 
     if (username == null || username.length() == 0) {
@@ -96,7 +97,7 @@
   @GetMapping(path = "/{username}/applications", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
   @ResponseBody
-  public DefaultApiResponse<AuthnAccountPermissionsResponseData> applications(
+  public DefaultApiResponse<AuthnAccountPermissionsResponseData> accountApplications(
       @PathVariable("username") String username,
       @RequestParam(name = "applicationId", required = false) String applicationId) {
 
@@ -120,7 +121,7 @@
   @GetMapping(path = "/{username}/menus", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
   @ResponseBody
-  public DefaultApiResponse<AuthnAccountPermissionsResponseData> menus(
+  public DefaultApiResponse<AuthnAccountPermissionsResponseData> accountMenus(
       @PathVariable("username") String username, 
       @RequestParam(name = "applicationId", required = false) String applicationId) {
 
@@ -144,7 +145,7 @@
   @GetMapping(path = "/{username}/operations", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
   @ResponseBody
-  public DefaultApiResponse<AuthnAccountPermissionsResponseData> operations(
+  public DefaultApiResponse<AuthnAccountPermissionsResponseData> accountOperations(
       @PathVariable("username") String username, 
       @RequestParam(name = "applicationId", required = false) String applicationId) {
 
@@ -168,7 +169,7 @@
   @GetMapping(path = "/{username}/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
   @ResponseStatus(value = HttpStatus.OK)
   @ResponseBody
-  public DefaultApiResponse<AuthnAccountResourcesResponseData> resources(
+  public DefaultApiResponse<AuthnAccountResourcesResponseData> accountResources(
       @PathVariable("username") String username, 
       @RequestParam(name = "applicationId", required = false) String applicationId) {
 
@@ -188,5 +189,19 @@
 
     return new DefaultApiResponse<AuthnAccountResourcesResponseData>(data);
   }
+  
+  @GetMapping(path = "/resources", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<AuthnResourceRoleListResponseData> applicationResources(
+      @RequestParam(name = "applicationId", required = false) String applicationId) {
+
+    List<ResourceRoleSet> resourceRoleSets = resourceService.selectByApplication(applicationId);
+    
+    AuthnResourceRoleListResponseData data = AuthnResourceRoleListResponseData.of(resourceRoleSets);
+
+    return new DefaultApiResponse<AuthnResourceRoleListResponseData>(data);
+  }
+  
 
 }
diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnResourceRoleListResponseData.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnResourceRoleListResponseData.java
new file mode 100644
index 0000000..9d89d3a
--- /dev/null
+++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/vo/response/AuthnResourceRoleListResponseData.java
@@ -0,0 +1,30 @@
+package com.supwisdom.institute.backend.base.api.v1.vo.response;
+
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.model.ResourceRoleSet;
+import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData;
+
+public class AuthnResourceRoleListResponseData implements IApiResponseData {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -9178840503146742900L;
+
+  @Getter
+  @Setter
+  public List<ResourceRoleSet> resourceRoleSets;
+  
+  public static AuthnResourceRoleListResponseData of(List<ResourceRoleSet> resourceRoleSets) {
+    AuthnResourceRoleListResponseData data = new AuthnResourceRoleListResponseData();
+    
+    data.setResourceRoleSets(resourceRoleSets);
+    
+    return data;
+  }
+
+}
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java
index 7fdd8c0..ef218bf 100644
--- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java
+++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/entity/Permission.java
@@ -22,6 +22,8 @@
   public static final String TYPE_APPLICATION = "1";
   public static final String TYPE_MENU = "2";
   public static final String TYPE_OPERATION = "3";
+  
+  public static final Integer DEFAULT_ORDER = 0;
 
   /**
    * 代码
@@ -48,18 +50,6 @@
   private String status;
 
   /**
-   * 类型(1 应用,2 菜单,3 操作)
-   */
-  @Column(name = "TYPE_")
-  private String type;
-
-  /**
-   * URL地址
-   */
-  @Column(name = "URL", nullable = true)
-  private String url;
-
-  /**
    * 系统ID
    */
   @Column(name = "APPLICATION_ID", nullable = true)
@@ -72,6 +62,18 @@
   private String parentId;
 
   /**
+   * 类型(1 应用,2 菜单,3 操作)
+   */
+  @Column(name = "TYPE_")
+  private String type;
+
+  /**
+   * URL地址
+   */
+  @Column(name = "URL", nullable = true)
+  private String url;
+
+  /**
    * 排序
    */
   @Column(name = "ORDER_")
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/ResourceRoleSet.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/ResourceRoleSet.java
new file mode 100644
index 0000000..d356ab6
--- /dev/null
+++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/model/ResourceRoleSet.java
@@ -0,0 +1,23 @@
+package com.supwisdom.institute.backend.base.domain.model;
+
+import java.util.Set;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.base.domain.entity.Role;
+import com.supwisdom.institute.backend.common.framework.model.IModel;
+
+public class ResourceRoleSet extends Resource implements IModel {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 2220390504237330816L;
+
+  @Getter
+  @Setter
+  Set<Role> roles;
+  
+}
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java
index 623411d..aaa0214 100644
--- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java
+++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/repo/PermissionRepository.java
@@ -176,10 +176,10 @@
   public default Permission insert(Permission entity) {
 
     if (entity.getParentId() == null) {
-      entity.setParentId("0");
+      entity.setParentId(Permission.ROOT_PARENT_ID);
     }
 
-    if (entity.getParentId() == null || entity.getParentId().isEmpty() || "0".equals(entity.getParentId())) {
+    if (entity.getParentId() == null || entity.getParentId().isEmpty() || Permission.ROOT_PARENT_ID.equals(entity.getParentId())) {
       int maxRgt = selectMaxRgt();
       entity.setLft((maxRgt+1));
       entity.setRgt((maxRgt+1) + 1);
@@ -218,11 +218,11 @@
     //}
     
     if (originEntity.getParentId() == null) {
-      originEntity.setParentId("0");
+      originEntity.setParentId(Permission.ROOT_PARENT_ID);
     }
     
     if (entity.getParentId() == null) {
-      entity.setParentId("0");
+      entity.setParentId(Permission.ROOT_PARENT_ID);
     }
     
     if (!originEntity.getParentId().equals(entity.getParentId()) ) {
@@ -234,7 +234,7 @@
       
       List<Permission> childEntities = this.selectBetweenLftRgt(lft, rgt);
 
-      if (entity.getParentId() == null || entity.getParentId().isEmpty() || "0".equals(entity.getParentId())) {
+      if (entity.getParentId() == null || entity.getParentId().isEmpty() || Permission.ROOT_PARENT_ID.equals(entity.getParentId())) {
         // 将 lft或rgt 大于等于该对象 rgt 的记录的 lft、rgt -offset
         updateLftRgtWhenDelete(rgt, offset);
   
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ApplicationService.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ApplicationService.java
index 7e2fa96..17e7503 100644
--- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ApplicationService.java
+++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ApplicationService.java
@@ -6,7 +6,9 @@
 import org.springframework.stereotype.Service;
 
 import com.supwisdom.institute.backend.base.domain.entity.Application;
+import com.supwisdom.institute.backend.base.domain.entity.Permission;
 import com.supwisdom.institute.backend.base.domain.repo.ApplicationRepository;
+import com.supwisdom.institute.backend.base.domain.repo.PermissionRepository;
 import com.supwisdom.institute.backend.common.framework.service.ABaseService;
 
 @Service
@@ -19,7 +21,64 @@
 
   @Autowired
   private ApplicationRepository applicationRepository;
+  
+  @Autowired
+  private PermissionRepository permissionRepository;
 
+  @Override
+  public Application insert(Application entity) {
+    entity = super.insert(entity);
+    
+    Permission p = new Permission();
+    p.setId(entity.getId());
+    p.setCode(entity.getCode());
+    p.setName(entity.getName());
+    p.setMemo(entity.getMemo());
+    p.setStatus(entity.getStatus());
+    p.setType(Permission.TYPE_APPLICATION);
+    p.setApplicationId(entity.getId());
+    p.setParentId(Permission.ROOT_PARENT_ID);
+    p.setOrder(Permission.DEFAULT_ORDER);
+    
+    permissionRepository.insert(p);
+    
+    return entity;
+  }
+  
+  @Override
+  public Application update(Application entity) {
+    entity = super.update(entity);
+    
+    Permission p = permissionRepository.selectById(entity.getId());
+    if (p != null) {
+      p = new Permission();
+      p.setCode(entity.getCode());
+      p.setName(entity.getName());
+      p.setMemo(entity.getMemo());
+      p.setStatus(entity.getStatus());
+      p.setType(Permission.TYPE_APPLICATION);
+      p.setApplicationId(entity.getId());
+      p.setParentId(Permission.ROOT_PARENT_ID);
+      p.setOrder(Permission.DEFAULT_ORDER);
+      
+      permissionRepository.update(p);
+    } else {
+      p = new Permission();
+      p.setId(entity.getId());
+      p.setCode(entity.getCode());
+      p.setName(entity.getName());
+      p.setMemo(entity.getMemo());
+      p.setStatus(entity.getStatus());
+      p.setType(Permission.TYPE_APPLICATION);
+      p.setApplicationId(entity.getId());
+      p.setParentId(Permission.ROOT_PARENT_ID);
+      p.setOrder(Permission.DEFAULT_ORDER);
+      
+      permissionRepository.insert(p);
+    }
+    
+    return entity;
+  }
   
   public void deleteBatch(List<String> ids) {
     
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ResourceService.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ResourceService.java
index e044cf5..47424ad 100644
--- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ResourceService.java
+++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/ResourceService.java
@@ -6,6 +6,7 @@
 import org.springframework.stereotype.Service;
 
 import com.supwisdom.institute.backend.base.domain.entity.Resource;
+import com.supwisdom.institute.backend.base.domain.model.ResourceRoleSet;
 import com.supwisdom.institute.backend.base.domain.repo.ResourceRepository;
 import com.supwisdom.institute.backend.common.framework.service.ABaseService;
 
@@ -27,6 +28,11 @@
       this.deleteById(id);
     });
   }
-  
+
+
+  public List<ResourceRoleSet> selectByApplication(String applicationId) {
+    // TODO Auto-generated method stub
+    return null;
+  }
   
 }