diff --git a/pom.xml b/pom.xml
index b139368..42bfb06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,10 +32,10 @@
1.6.2
-
- org.springframework.boot
- spring-boot-starter-data-mongodb
-
+
+
+
+
org.springframework.boot
spring-boot-starter-data-redis
diff --git a/src/main/java/com/zsc/edu/gateway/FirstTimeInitializer.java b/src/main/java/com/zsc/edu/gateway/FirstTimeInitializer.java
index 0c46d72..3d5644d 100644
--- a/src/main/java/com/zsc/edu/gateway/FirstTimeInitializer.java
+++ b/src/main/java/com/zsc/edu/gateway/FirstTimeInitializer.java
@@ -41,28 +41,28 @@ public class FirstTimeInitializer implements CommandLineRunner {
public void run(String... args) {
if (authorityService.count() == 0L) {
- Authority userPerm = new Authority(null, "用户模块", "用户管理", "USER", true, null);
- Authority rolePerm = new Authority(null, "角色模块", "角色管理", "ROLE", true, null);
- Authority deptPerm = new Authority(null, "部门模块", "部门管理", "DEPT", true, null);
- Authority AuthorityPerm = new Authority(null, "权限模块", "权限管理", "Authority", true, null);
+ Authority userPerm = new Authority(null, "用户模块", "用户管理", "SYSTEM:USER", true, null);
+ Authority rolePerm = new Authority(null, "角色模块", "角色管理", "SYSTEM:ROLE", true, null);
+ Authority deptPerm = new Authority(null, "部门模块", "部门管理", "SYSTEM:DEPT", true, null);
+ Authority AuthorityPerm = new Authority(null, "权限模块", "权限管理", "SYSTEM:AUTHORITY", true, null);
authorityService.saveBatch(List.of(userPerm, rolePerm, deptPerm, AuthorityPerm));
List authorities = new ArrayList<>();
- authorities.add(new Authority(userPerm.getId(), "用户管理", "用户列表", "USER_QUERY", true, null));
- authorities.add(new Authority(userPerm.getId(), "用户管理", "用户新增", "USER_CREATE",true, null));
- authorities.add(new Authority(userPerm.getId(), "用户管理", "用户修改", "USER_UPDATE",true, null));
- authorities.add(new Authority(userPerm.getId(), "用户管理", "用户删除", "USER_DELETE",true, null));
- authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色列表", "ROLE_QUERY", true, null));
- authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色新增", "ROLE_CREATE",true, null));
- authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色修改", "ROLE_UPDATE",true, null));
- authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色删除", "ROLE_DELETE",true, null));
- authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门列表", "DEPT_QUERY", true, null));
- authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门新增", "DEPT_CREATE",true, null));
- authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门修改", "DEPT_UPDATE",true, null));
- authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门删除", "DEPT_DELETE",true, null));
- authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限列表", "AUTHORITY_QUERY", true, null));
- authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限新增", "AUTHORITY_CREATE",true, null));
- authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限修改", "AUTHORITY_UPDATE",true, null));
- authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限删除", "AUTHORITY_DELETE",true, null));
+ authorities.add(new Authority(userPerm.getId(), "用户管理", "用户列表", "SYSTEM:USER:QUERY", true, null));
+ authorities.add(new Authority(userPerm.getId(), "用户管理", "用户新增", "SYSTEM:USER:CREATE",true, null));
+ authorities.add(new Authority(userPerm.getId(), "用户管理", "用户修改", "SYSTEM:USER:UPDATE",true, null));
+ authorities.add(new Authority(userPerm.getId(), "用户管理", "用户删除", "SYSTEM:USER:DELETE",true, null));
+ authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色列表", "SYSTEM:ROLE:QUERY", true, null));
+ authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色新增", "SYSTEM:ROLE:CREATE",true, null));
+ authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色修改", "SYSTEM:ROLE:UPDATE",true, null));
+ authorities.add(new Authority(rolePerm.getId(), "角色管理", "角色删除", "SYSTEM:ROLE:DELETE",true, null));
+ authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门列表", "SYSTEM:DEPT:QUERY", true, null));
+ authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门新增", "SYSTEM:DEPT:CREATE",true, null));
+ authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门修改", "SYSTEM:DEPT:UPDATE",true, null));
+ authorities.add(new Authority(deptPerm.getId(), "部门管理", "部门删除", "SYSTEM:DEPT:DELETE",true, null));
+ authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限列表", "SYSTEM:AUTHORITY:QUERY", true, null));
+ authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限新增", "SYSTEM:AUTHORITY:CREATE",true, null));
+ authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限修改", "SYSTEM:AUTHORITY:UPDATE",true, null));
+ authorities.add(new Authority(AuthorityPerm.getId(), "权限管理", "权限删除", "SYSTEM:AUTHORITY:DELETE",true, null));
authorityService.saveBatch(authorities);
}
if (roleService.count() == 0L) {
diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java b/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java
index f22f004..fb832ea 100644
--- a/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java
+++ b/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java
@@ -1,13 +1,18 @@
package com.zsc.edu.gateway.framework.security;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
+import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.stereotype.Component;
import java.io.IOException;
+import java.util.Map;
/**
* @author harry_yao
@@ -16,12 +21,10 @@ import java.io.IOException;
@Component
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
-// private final OnlineUserService onlineUserService;
-// private final UserService userService;
-// private final LoginLogService loginLogService;
-
@Override
- public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
+ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
+// response.sendRedirect("/api/rest/user/me");
+// request.getRequestDispatcher("/api/rest/user/me").forward(request, response);
// Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// String sessionId = request.getRequestedSessionId();
// String remoteAddr = request.getRemoteAddr();
diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/JsonAuthenticationFilter.java b/src/main/java/com/zsc/edu/gateway/framework/security/JsonAuthenticationFilter.java
index fbca478..53b2177 100644
--- a/src/main/java/com/zsc/edu/gateway/framework/security/JsonAuthenticationFilter.java
+++ b/src/main/java/com/zsc/edu/gateway/framework/security/JsonAuthenticationFilter.java
@@ -14,10 +14,11 @@ import java.io.IOException;
import java.util.Map;
public class JsonAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
+
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
throws AuthenticationException {
- if (!request.getMethod().equals("POST")) {
+ if (!request.getMethod().equals("POST")) {
throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
}
if (request.getContentType().equals(MediaType.APPLICATION_JSON_VALUE)) {
@@ -30,7 +31,7 @@ public class JsonAuthenticationFilter extends UsernamePasswordAuthenticationFilt
username = username.trim();
password = (password != null) ? password : "";
password = password.trim();
- UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
+ UsernamePasswordAuthenticationToken authRequest = UsernamePasswordAuthenticationToken.unauthenticated(username, password);
// Allow subclasses to set the "details" property
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/SecurityBeanConfig.java b/src/main/java/com/zsc/edu/gateway/framework/security/SecurityBeanConfig.java
index 4372f35..8620c24 100644
--- a/src/main/java/com/zsc/edu/gateway/framework/security/SecurityBeanConfig.java
+++ b/src/main/java/com/zsc/edu/gateway/framework/security/SecurityBeanConfig.java
@@ -13,10 +13,10 @@ import org.springframework.security.web.session.HttpSessionEventPublisher;
*/
@Configuration
public class SecurityBeanConfig {
- @Bean
- public PasswordEncoder passwordEncoder() {
- return PasswordEncoderFactories.createDelegatingPasswordEncoder();
- }
+// @Bean
+// public PasswordEncoder passwordEncoder() {
+// return PasswordEncoderFactories.createDelegatingPasswordEncoder();
+// }
@Bean
public SessionRegistry sessionRegistry() {
diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java b/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java
index b3945e8..edf89e1 100644
--- a/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java
+++ b/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java
@@ -11,11 +11,16 @@ import org.springframework.security.authentication.dao.DaoAuthenticationProvider
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
+import org.springframework.security.web.csrf.CsrfTokenRepository;
+import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
+import org.springframework.util.AntPathMatcher;
import javax.sql.DataSource;
@@ -37,6 +42,11 @@ public class SpringSecurityConfig {
@Resource
private final DataSource dataSource;
+ @Bean
+ public BCryptPasswordEncoder bCryptPasswordEncoder() {
+ return new BCryptPasswordEncoder();
+ };
+
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
@@ -48,7 +58,7 @@ public class SpringSecurityConfig {
AuthenticationManager authenticationManager() {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setUserDetailsService(userDetailsService);
- daoAuthenticationProvider.setPasswordEncoder(securityBeanConfig.passwordEncoder());
+ daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());
return new ProviderManager(daoAuthenticationProvider);
}
@@ -72,6 +82,43 @@ public class SpringSecurityConfig {
.requestMatchers(HttpMethod.GET, "/api/rest/user/me","/api/rest/user/register","/api/rest/user/send-email").permitAll()
.requestMatchers(HttpMethod.POST, "/api/rest/user/login","/api/rest/user/register").permitAll()
.requestMatchers("/api/**").authenticated())
+ // 不用注解,直接通过判断路径实现动态访问权限
+// .requestMatchers("/api/**").access((authentication, object) -> {
+// //表示请求的 URL 地址和数据库的地址是否匹配上了
+// boolean isMatch = false;
+// //获取当前请求的 URL 地址
+// String requestURI = object.getRequest().getRequestURI();
+// List menuWithRole = menuService.getMenuWithRole();
+// for (MenuWithRoleVO m : menuWithRole) {
+// AntPathMatcher antPathMatcher = new AntPathMatcher();
+// if (antPathMatcher.match(m.getUrl(), requestURI)) {
+// isMatch = true;
+// //说明找到了请求的地址了
+// //这就是当前请求需要的角色
+// List roles = m.getRoles();
+// //获取当前登录用户的角色
+// Collection extends GrantedAuthority> authorities = authentication.get().getAuthorities();
+// for (GrantedAuthority authority : authorities) {
+// for (Role role : roles) {
+// if (authority.getAuthority().equals(role.getName())) {
+// //说明当前登录用户具备当前请求所需要的角色
+// return new AuthorizationDecision(true);
+// }
+// }
+// }
+// }
+// }
+// if (!isMatch) {
+// //说明请求的 URL 地址和数据库的地址没有匹配上,对于这种请求,统一只要登录就能访问
+// if (authentication.get() instanceof AnonymousAuthenticationToken) {
+// return new AuthorizationDecision(false);
+// } else {
+// //说明用户已经认证了
+// return new AuthorizationDecision(true);
+// }
+// }
+// return new AuthorizationDecision(false);
+// }))
.addFilterAt(jsonAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.formLogin(form -> form
.loginPage("/user/login")
diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/UserDetailsImpl.java b/src/main/java/com/zsc/edu/gateway/framework/security/UserDetailsImpl.java
index 39197ab..8b2c622 100644
--- a/src/main/java/com/zsc/edu/gateway/framework/security/UserDetailsImpl.java
+++ b/src/main/java/com/zsc/edu/gateway/framework/security/UserDetailsImpl.java
@@ -60,7 +60,6 @@ public class UserDetailsImpl implements UserDetails {
}
@Override
-
public Collection extends GrantedAuthority> getAuthorities() {
return authorities.stream().map(authority -> new SimpleGrantedAuthority(authority.getName())).collect(Collectors.toSet());
}
diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java
index 8df7501..8f77250 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java
@@ -106,14 +106,14 @@ public class UserController {
}
/**
- * 分页查询用户信息 hasAuthority('USER_QUERY')
+ * 分页查询用户信息 hasAuthority('SYSTEM:USER:QUERY')
*
* @param query 查询表单
* @param page 分页
* @return 分页用户信息
*/
@GetMapping
- @PreAuthorize("hasAuthority('USER_QUERY·')")
+ @PreAuthorize("hasAuthority('SYSTEM:USER:QUERY')")
public Page query(UserQuery query, Page page) {
return service.page(page, query.wrapper());
}
@@ -121,58 +121,58 @@ public class UserController {
/**
- * 新建用户 hasAuthority('USER_CREATE')
+ * 新建用户 hasAuthority('SYSTEM:USER:CREATE')
*
* @param dto 表单数据
* @return 新建的用户信息
*/
@PostMapping
- @PreAuthorize("hasAuthority('USER_CREATE')")
+ @PreAuthorize("hasAuthority('SYSTEM:USER:CREATE')")
public Boolean create(@RequestBody UserCreateDto dto) {
return service.create(dto);
}
/**
- * 更新用户 hasAuthority('USER_UPDATE')
+ * 更新用户 hasAuthority('SYSTEM:USER:UPDATE')
*
* @param dto 表单数据
* @param id ID
* @return 更新后的用户
*/
@PatchMapping("{id}")
- @PreAuthorize("hasAuthority('USER_UPDATE')")
+ @PreAuthorize("hasAuthority('SYSTEM:USER:UPDATE')")
public Boolean update(@RequestBody UserUpdateDto dto, @PathVariable("id") Long id) {
return service.update(dto, id);
}
/**
- * 更新用户密码 hasAuthority('USER_UPDATE')
+ * 更新用户密码 hasAuthority('SYSTEM:USER:UPDATE')
*
* @param id ID
* @param password 新密码
*/
@PatchMapping("{id}/update-password")
- @PreAuthorize("hasAuthority('USER_UPDATE')")
+ @PreAuthorize("hasAuthority('SYSTEM:USER:UPDATE')")
public Boolean updatePassword(@PathVariable("id") Long id, @RequestParam String password) {
return service.updatePassword(password, id);
}
/**
- * 切换用户"启动/禁用"状态 hasAuthority('USER_DELETE')
+ * 切换用户"启动/禁用"状态 hasAuthority('SYSTEM:USER:DELETE')
*
* @param id ID
* @return Dept 更新后的用户
*/
@PatchMapping("{id}/toggle")
- @PreAuthorize("hasAuthority('USER_DELETE')")
+ @PreAuthorize("hasAuthority('SYSTEM:USER:DELETE')")
public Boolean toggle(@PathVariable("id") Long id) {
return service.toggle(id);
}
/**
- * 删除用户 hasAuthority('USER_DELETE')
+ * 删除用户 hasAuthority('SYSTEM:USER:DELETE')
* */
@DeleteMapping("{id}")
- @PreAuthorize("hasAuthority('USER_DELETE')")
+ @PreAuthorize("hasAuthority('SYSTEM:USER:DELETE')")
public Boolean delete(@PathVariable("id") Long id) {
return service.removeById(id);
}
diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Authority.java b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Authority.java
index 4f70aef..6b32e33 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Authority.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Authority.java
@@ -1,10 +1,7 @@
package com.zsc.edu.gateway.modules.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.AllArgsConstructor;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.*;
import java.util.Date;
@@ -15,6 +12,7 @@ import java.util.Date;
*/
@Getter
@Setter
+@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@TableName("sys_authority")
diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java
index 83935a6..cb3b365 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java
@@ -1,9 +1,14 @@
package com.zsc.edu.gateway.modules.system.entity;
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.JavaType;
+import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
+import org.apache.ibatis.type.JdbcType;
/**
* 菜单
@@ -18,7 +23,12 @@ public class Menu extends BaseEntity {
/**
* 父菜单id
*/
+ @TableField(value = "pid", jdbcType = JdbcType.BIGINT)
private Long pid;
+ /**
+ * 菜单类型
+ */
+ private Type type = Type.PAGE;
/**
* 路由名称
*/
@@ -52,8 +62,14 @@ public class Menu extends BaseEntity {
*/
private String permissions;
- public Menu(Long pid, String name, String path, String locale, String icon, Boolean requiresAuth, Boolean hideInMenu, Integer order, String permissions) {
+ /**
+ * 权限字符串
+ */
+ private String authority;
+
+ public Menu(Long pid, Type type, String name, String path, String locale, String icon, Boolean requiresAuth, Boolean hideInMenu, Integer order, String authority) {
this.pid = pid;
+ this.type = type;
this.name = name;
this.path = path;
this.locale = locale;
@@ -61,6 +77,25 @@ public class Menu extends BaseEntity {
this.requiresAuth = requiresAuth;
this.hideInMenu = hideInMenu;
this.menuOrder = order;
- this.permissions = permissions;
+ this.authority = authority;
+ }
+
+ /**
+ * 菜单类型
+ */
+ @Getter
+ @AllArgsConstructor
+ public enum Type {
+ /**
+ * 页面
+ */
+ PAGE(0),
+ /**
+ * 按钮
+ */
+ BUTTON(1);
+
+ @EnumValue
+ private final int value;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/entity/RoleMenu.java b/src/main/java/com/zsc/edu/gateway/modules/system/entity/RoleMenu.java
new file mode 100644
index 0000000..1fb71c9
--- /dev/null
+++ b/src/main/java/com/zsc/edu/gateway/modules/system/entity/RoleMenu.java
@@ -0,0 +1,32 @@
+package com.zsc.edu.gateway.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * sys_role_menu
+ * @author zhuang
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Getter
+@Setter
+@TableName("sys_role_menu")
+public class RoleMenu implements Serializable {
+ /**
+ * 角色ID
+ */
+ private Long roleId;
+ /**
+ * 权限ID
+ */
+ private Long menuId;
+
+ // @TableField(exist = false)
+// private Set authorities;
+}
\ No newline at end of file
diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/repo/RoleMenuRepository.java b/src/main/java/com/zsc/edu/gateway/modules/system/repo/RoleMenuRepository.java
new file mode 100644
index 0000000..808817e
--- /dev/null
+++ b/src/main/java/com/zsc/edu/gateway/modules/system/repo/RoleMenuRepository.java
@@ -0,0 +1,11 @@
+package com.zsc.edu.gateway.modules.system.repo;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zsc.edu.gateway.modules.system.entity.RoleMenu;
+
+/**
+ * @author Yao
+ */
+public interface RoleMenuRepository extends BaseMapper {
+
+}
diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/vo/MenuVo.java b/src/main/java/com/zsc/edu/gateway/modules/system/vo/MenuVo.java
index 2767ad1..c3a48b0 100644
--- a/src/main/java/com/zsc/edu/gateway/modules/system/vo/MenuVo.java
+++ b/src/main/java/com/zsc/edu/gateway/modules/system/vo/MenuVo.java
@@ -69,7 +69,7 @@ class Meta {
/**
* 访问权限,使用","隔开的权限字符串
*/
- private String permissions;
+ private String[] permissions;
public Meta(Menu menu) {
this.locale = menu.getLocale();
@@ -77,6 +77,6 @@ class Meta {
this.requiresAuth = menu.getRequiresAuth();
this.hideInMenu = menu.getHideInMenu();
this.order = menu.getMenuOrder();
- this.permissions = menu.getPermissions();
+ this.permissions = menu.getPermissions().split(",");
}
}
\ No newline at end of file
diff --git a/src/main/resources/mappers/UserMapper.xml b/src/main/resources/mappers/UserMapper.xml
index e042786..c70812a 100644
--- a/src/main/resources/mappers/UserMapper.xml
+++ b/src/main/resources/mappers/UserMapper.xml
@@ -3,9 +3,10 @@
-
+
+
@@ -14,27 +15,31 @@
+
+
+
+
id, username, password, email, phone, create_time
-