diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/Permission.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/Permission.java
index b5954ff..30911e8 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/Permission.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/domain/Permission.java
@@ -42,7 +42,7 @@
   /**
    * 类型（1 应用，2 页面，3 操作）
    */
-  @Column(name = "TYPE")
+  @Column(name = "TYPE_")
   private String type;
 
   /**
@@ -58,9 +58,15 @@
   private String parentId;
 
   /**
+   * 排序
+   */
+  @Column(name = "ORDER_")
+  private String order;
+
+  /**
    * 层次
    */
-  @Column(name = "LEVEL")
+  @Column(name = "LEVEL_")
   private String level;
 
   /**
@@ -131,6 +137,14 @@
     this.parentId = parentId;
   }
 
+  public String getOrder() {
+    return order;
+  }
+
+  public void setOrder(String order) {
+    this.order = order;
+  }
+
   public String getLevel() {
     return level;
   }
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/PermissionRepository.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/PermissionRepository.java
index 84e49a5..49825f6 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/PermissionRepository.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/PermissionRepository.java
@@ -45,10 +45,10 @@
   
 
 
-  public default Permission selectByCodeType(String applicationCode, String type) {
+  public default Permission selectApplicationPermissionByCode(String code) {
     Permission probe = new Permission();
-    probe.setCode(applicationCode);
-    probe.setType(type);
+    probe.setCode(code);
+    probe.setType("1");
     
     ExampleMatcher matcher = ExampleMatcher.matching()
         .withMatcher("code", ExampleMatcher.GenericPropertyMatchers.exact())
@@ -94,7 +94,7 @@
   public default List<Permission> selectByUsername(String username, String applicationCode, String type) {
     List<Permission> permissions = new ArrayList<Permission>();
     
-    Permission applicationPermission = selectByCodeType(applicationCode, "1");
+    Permission applicationPermission = selectApplicationPermissionByCode(applicationCode);
     if (applicationPermission == null) {
       return permissions;
     }
diff --git a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserGroupRepository.java b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserGroupRepository.java
index 954d565..04f26d0 100644
--- a/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserGroupRepository.java
+++ b/samples/user/src/main/java/com/supwisdom/leaveschool/user/repository/UserGroupRepository.java
@@ -61,31 +61,31 @@
   }
 
 
-  public default void relateUserGroups(User user, List<UserGroup> groupUsers) {
+  public default void relateUserGroups(User user, List<UserGroup> userGroups) {
 
     List<UserGroup> existUserGroups = this.selectListByUserId(user.getId());
 
     Map<String, UserGroup> existMapUserGroups = new LinkedHashMap<String, UserGroup>();
-    for (UserGroup groupUser : existUserGroups) {
-      String k = String.format("%s", groupUser.getGroupId());
-      existMapUserGroups.put(k, groupUser);
+    for (UserGroup userGroup : existUserGroups) {
+      String k = String.format("%s", userGroup.getGroupId());
+      existMapUserGroups.put(k, userGroup);
     }
 
-    for (UserGroup groupUser : groupUsers) {
-      String k = String.format("%s", groupUser.getGroupId());
+    for (UserGroup userGroup : userGroups) {
+      String k = String.format("%s", userGroup.getGroupId());
 
       if (existMapUserGroups.containsKey(k)) {
         existMapUserGroups.remove(k);
       } else {
-        groupUser.setCompanyId(user.getCompanyId());
-        groupUser.setUserId(user.getId());
+        userGroup.setCompanyId(user.getCompanyId());
+        userGroup.setUserId(user.getId());
 
-        this.insert(groupUser);
+        this.insert(userGroup);
       }
     }
 
-    for (UserGroup groupUser : existMapUserGroups.values()) {
-      this.deleteById(groupUser.getId());
+    for (UserGroup userGroup : existMapUserGroups.values()) {
+      this.deleteById(userGroup.getId());
     }
   }
 
@@ -99,37 +99,37 @@
 
     Example<UserGroup> example = Example.of(probe, matcher);
 
-    List<UserGroup> groupUsers = this.findAll(example);
+    List<UserGroup> userGroups = this.findAll(example);
 
-    return groupUsers;
+    return userGroups;
   }
 
   
-  public default void relateGroupUsers(Group group, List<UserGroup> groupUsers) {
+  public default void relateGroupUsers(Group group, List<UserGroup> userGroups) {
 
     List<UserGroup> existGroupUsers = this.selectListByGroupId(group.getId());
 
     Map<String, UserGroup> existMapGroupUsers = new LinkedHashMap<String, UserGroup>();
-    for (UserGroup groupUser : existGroupUsers) {
-      String k = String.format("%s", groupUser.getUserId());
-      existMapGroupUsers.put(k, groupUser);
+    for (UserGroup userGroup : existGroupUsers) {
+      String k = String.format("%s", userGroup.getUserId());
+      existMapGroupUsers.put(k, userGroup);
     }
 
-    for (UserGroup groupUser : groupUsers) {
-      String k = String.format("%s", groupUser.getUserId());
+    for (UserGroup userGroup : userGroups) {
+      String k = String.format("%s", userGroup.getUserId());
 
       if (existMapGroupUsers.containsKey(k)) {
         existMapGroupUsers.remove(k);
       } else {
-        groupUser.setCompanyId(group.getCompanyId());
-        groupUser.setGroupId(group.getId());
+        userGroup.setCompanyId(group.getCompanyId());
+        userGroup.setGroupId(group.getId());
 
-        this.insert(groupUser);
+        this.insert(userGroup);
       }
     }
 
-    for (UserGroup groupUser : existMapGroupUsers.values()) {
-      this.deleteById(groupUser.getId());
+    for (UserGroup userGroup : existMapGroupUsers.values()) {
+      this.deleteById(userGroup.getId());
     }
   }
 
@@ -143,10 +143,9 @@
 
     Example<UserGroup> example = Example.of(probe, matcher);
 
-    List<UserGroup> groupUsers = this.findAll(example);
+    List<UserGroup> userGroups = this.findAll(example);
 
-    return groupUsers;
+    return userGroups;
   }
 
-
 }
diff --git a/sql/sample-user.sql b/sql/sample-user.sql
index ff3e654..6c5e727 100644
--- a/sql/sample-user.sql
+++ b/sql/sample-user.sql
@@ -31,7 +31,6 @@
 COMMENT = '用户表';
 
 
-
 CREATE TABLE `TB_U_GROUP` (
   `ID` VARCHAR(100) NOT NULL COMMENT '',
   `COMPANY_ID` VARCHAR(100) COMMENT 'CompanyID',
@@ -54,7 +53,6 @@
 COMMENT = '用户组表';
 
 
-
 CREATE TABLE `TB_U_ROLE` (
   `ID` VARCHAR(100) NOT NULL COMMENT '',
   `COMPANY_ID` VARCHAR(100) COMMENT 'CompanyID',
@@ -97,6 +95,7 @@
 COMMENT = '用户组 - 用户表';
 
 
+
 CREATE TABLE `TB_U_USER_ROLE` (
   `ID` VARCHAR(100) NOT NULL COMMENT '',
   `COMPANY_ID` VARCHAR(100) COMMENT 'CompanyID',
@@ -153,13 +152,14 @@
   `MEMO` VARCHAR(500) COMMENT '备注',
   `STATUS` VARCHAR(10) NOT NULL COMMENT '状态（1 启用，0 停用）',
 
-  `TYPE` VARCHAR(10) NOT NULL COMMENT '类型（1 应用，2 页面，3 操作）',
+  `TYPE_` VARCHAR(10) NOT NULL COMMENT '类型（1 应用，2 页面，3 操作）',
   `URL` VARCHAR(500) COMMENT 'URL地址',
 
   `PARENT_ID` VARCHAR(10) NOT NULL COMMENT '父级ID', 
-  `LEVEL` VARCHAR(10) NOT NULL COMMENT '层次',
-  `LFT` INT(11) COMMENT '左序',
-  `RGT` INT(11) COMMENT '右序',
+  `ORDER_` INT(11) NOT NULL COMMENT '排序',
+  `LEVEL_` INT(11) NOT NULL COMMENT '层次',
+  `LFT` INT(11) NOT NULL COMMENT '左索引',
+  `RGT` INT(11) NOT NULL COMMENT '右索引',
 
   PRIMARY KEY (`ID`),
   UNIQUE KEY `UQ_CODE` (`COMPANY_ID`,`CODE`)
@@ -186,3 +186,70 @@
 )
 COMMENT = '角色 - 权限表';
 
+
+
+
+insert into TB_U_USER (ID, DELETED, USERNAME, PASSWORD, ENABLED, ACCOUNT_NON_EXPIRED, ACCOUNT_NON_LOCKED, CREDENTIALS_NON_EXPIRED, NAME, STATUS) 
+values ('1', 1, 'admin', 'admin', 1, 1, 1, 1, 'Admin', '1');
+
+commit;
+
+
+insert into TB_U_GROUP (ID, DELETED, CODE, NAME, STATUS) 
+values ('1', 1, 'users', '所有用户', '1');
+
+commit;
+
+
+insert into TB_U_ROLE (ID, DELETED, CODE, NAME, STATUS) 
+values ('1', 1, 'administrator', '超级管理员', '1');
+insert into TB_U_ROLE (ID, DELETED, CODE, NAME, STATUS) 
+values ('2', 1, 'user', '普通用户', '1');
+
+commit;
+
+
+insert into TB_U_USER_GROUP (ID, DELETED, USER_ID, GROUP_ID) 
+values ('1_1', 1, '1', '1');
+
+commit;
+
+
+insert into TB_U_USER_ROLE (ID, DELETED, USER_ID, ROLE_ID) 
+values ('1_1', 1, '1', '1');
+
+insert into TB_U_USER_ROLE (ID, DELETED, USER_ID, ROLE_ID) 
+values ('1_2', 1, '1', '2');
+
+commit;
+
+
+insert into TB_U_GROUP_ROLE (ID, DELETED, GROUP_ID, ROLE_ID) 
+values ('1', 1, '1', '2');
+
+commit;
+
+
+insert into TB_U_PERMISSION (ID, DELETED, CODE, NAME, STATUS, TYPE_, URL, PARENT_ID, ORDER_, LEVEL_, LFT, RGT) 
+values ('1', 1, 'client', 'Client', '1', '1', '', '0', 1, 1, 1, 10);
+
+insert into TB_U_PERMISSION (ID, DELETED, CODE, NAME, STATUS, TYPE_, URL, PARENT_ID, ORDER_, LEVEL_, LFT, RGT) 
+values ('10000', 1, 'admin.system', '系统管理', '1', '2', '', '1', 1000, 2, 2, 9);
+
+insert into TB_U_PERMISSION (ID, DELETED, CODE, NAME, STATUS, TYPE_, URL, PARENT_ID, ORDER_, LEVEL_, LFT, RGT) 
+values ('10100', 1, 'admin.system.user', '用户管理', '1', '2', '', '10000', 10100, 3, 3, 4);
+insert into TB_U_PERMISSION (ID, DELETED, CODE, NAME, STATUS, TYPE_, URL, PARENT_ID, ORDER_, LEVEL_, LFT, RGT) 
+values ('10200', 1, 'admin.system.role', '角色管理', '1', '2', '', '10000', 10200, 3, 5, 6);
+insert into TB_U_PERMISSION (ID, DELETED, CODE, NAME, STATUS, TYPE_, URL, PARENT_ID, ORDER_, LEVEL_, LFT, RGT) 
+values ('10300', 1, 'admin.system.permission', '权限管理', '1', '2', '', '10000', 10300, 3, 7, 8);
+
+commit;
+
+
+insert into TB_U_ROLE_PERMISSION (ID, DELETED, ROLE_ID, PERMISSION_ID) 
+values ('2_1', 1, '2', '1');
+
+insert into TB_U_ROLE_PERMISSION (ID, DELETED, ROLE_ID, PERMISSION_ID) 
+select CONCAT('1_', ID), 1, '1', ID from TB_U_PERMISSION;
+
+commit;
