diff --git a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java
index 7859731..f10244a 100644
--- a/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java
+++ b/base/api/src/main/java/com/supwisdom/institute/backend/base/api/v1/admin/AdminPermissionController.java
@@ -1,5 +1,47 @@
 package com.supwisdom.institute.backend.base.api.v1.admin;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.MimeTypeUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.supwisdom.institute.backend.base.api.vo.response.PermissionTreeResponseData;
+import com.supwisdom.institute.backend.base.domain.model.PermissionTreeNode;
+import com.supwisdom.institute.backend.base.domain.service.PermissionService;
+import com.supwisdom.institute.backend.common.framework.vo.response.DefaultApiResponse;
+
+@Api(value = "BaseAdminPermission", tags = { "BaseAdminPermission" }, description = "权限的操作接口")
+@Slf4j
+@RestController
+@RequestMapping("/v1/admin/permissions")
 public class AdminPermissionController {
 
+  @Autowired
+  private PermissionService permissionService;
+
+  @GetMapping(path = "/tree", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+  @ResponseStatus(value = HttpStatus.OK)
+  @ResponseBody
+  public DefaultApiResponse<PermissionTreeResponseData> tree() {
+    
+    Map<String, Object> mapBean = new HashMap<String, Object>();
+    //mapBean.put("type", Permission.TYPE_MENU);
+
+    PermissionTreeNode tree = permissionService.selectPermissionTree(mapBean);
+
+    PermissionTreeResponseData data = PermissionTreeResponseData.of(tree);
+
+    return new DefaultApiResponse<PermissionTreeResponseData>(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 3707ec7..1fedb61 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
@@ -143,6 +143,14 @@
     this.url = url;
   }
 
+  public String getApplicationId() {
+    return applicationId;
+  }
+
+  public void setApplicationId(String applicationId) {
+    this.applicationId = applicationId;
+  }
+
   public String getParentId() {
     return parentId;
   }
diff --git a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java
index 31119b3..ead21b9 100644
--- a/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java
+++ b/base/domain/src/main/java/com/supwisdom/institute/backend/base/domain/service/PermissionService.java
@@ -27,6 +27,16 @@
 
   @Autowired
   private PermissionRepository permissionRepository;
+  
+  @Override
+  public Permission insert(Permission entity) {
+    Permission parentPermission = permissionRepository.selectById(entity.getParentId());
+    if (parentPermission != null) {
+      entity.setApplicationId(parentPermission.getApplicationId());
+    }
+    
+    return super.insert(entity);
+  }
 
   public void deleteBatch(List<String> ids) {
     
@@ -47,10 +57,7 @@
     
     Map<String, PermissionTreeNode> parentTreeNode = new LinkedHashMap<String, PermissionTreeNode>();
     
-    PermissionTreeNode rootTreeNode = new PermissionTreeNode();
-    rootTreeNode.setId(applicationPermission.getId());
-    rootTreeNode.setCode(applicationPermission.getCode());
-    rootTreeNode.setName(applicationPermission.getName());
+    PermissionTreeNode rootTreeNode = EntityUtils.copy(applicationPermission, new PermissionTreeNode());
     rootTreeNode.setChildren(new ArrayList<PermissionTreeNode>());
     
     parentTreeNode.put(rootTreeNode.getId(), rootTreeNode);
@@ -60,6 +67,9 @@
       PermissionTreeNode treeNode = EntityUtils.copy(permission, new PermissionTreeNode());
       treeNode.setChildren(new ArrayList<PermissionTreeNode>());
       
+      if (parentTreeNode.containsKey(treeNode.getId())) {
+        continue;
+      }
       parentTreeNode.put(treeNode.getId(), treeNode);
     }
     
diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java
index 5f10b42..9e13ed0 100644
--- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java
+++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/exception/BaseException.java
@@ -12,27 +12,45 @@
   /**
    * 具体异常码
    */
-  protected int code = -1;
+  protected final int code;
+  
+  private final String messageCode;
 
+  @Deprecated
   public BaseException(int code, String msgFormat, Object... args) {
       super(String.format(msgFormat, args));
       this.code = code;
+      this.messageCode = null;
   }
+  
+  public BaseException(int code, String messageCode, String msgFormat, Object... args) {
+    super(String.format(msgFormat, args));
+    this.code = code;
+    this.messageCode = messageCode;
+}
 
   public BaseException() {
-      super();
+    super();
+    this.code = DEFAULT_CODE;
+    this.messageCode = null;
   }
 
   public BaseException(String message, Throwable cause) {
       super(message, cause);
+      this.code = DEFAULT_CODE;
+      this.messageCode = null;
   }
 
   public BaseException(Throwable cause) {
       super(cause);
+      this.code = DEFAULT_CODE;
+      this.messageCode = null;
   }
 
   public BaseException(String message) {
       super(message);
+      this.code = DEFAULT_CODE;
+      this.messageCode = null;
   }
 
   public int getCode() {
@@ -51,8 +69,13 @@
       return new BaseException(DEFAULT_CODE, msgFormat, args);
   }
   
+  @Deprecated
   public static BaseException newInstance(int code, String msgFormat, Object... args) {
     return new BaseException(code, msgFormat, args);
   }
+  
+  public static BaseException newInstance(int code, String messageCode, String msgFormat, Object... args) {
+    return new BaseException(code, messageCode, msgFormat, args);
+  }
 
 }
diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java
index 2be2c31..e5308df 100644
--- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java
+++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java
@@ -40,6 +40,10 @@
     
     Specification<E> spec = convertToSpec(mapBean);
     
+    if (pageIndex == -1) {
+      loadAll = true;
+    }
+    
     if (loadAll) {
       pageIndex = 0;
       pageSize = Integer.MAX_VALUE;
