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;
+  }
   
 }
