diff --git a/boot/platform/src/main/java/com/platform/boot/commons/query/ParamSql.java b/boot/platform/src/main/java/com/platform/boot/commons/query/ParamSql.java index 4de6811e..35064e65 100644 --- a/boot/platform/src/main/java/com/platform/boot/commons/query/ParamSql.java +++ b/boot/platform/src/main/java/com/platform/boot/commons/query/ParamSql.java @@ -1,7 +1,5 @@ package com.platform.boot.commons.query; -import com.google.common.collect.Maps; - import java.io.Serializable; import java.util.Map; import java.util.StringJoiner; @@ -10,8 +8,6 @@ * @author Alex bob */ public record ParamSql(StringJoiner sql, Map params) implements Serializable { - public final static ParamSql EMPTY = ParamSql.of(new StringJoiner(" AND "), Maps.newHashMap()); - /** * Creates a new ParamSql instance with the given SQL string and parameters. * diff --git a/boot/platform/src/main/java/com/platform/boot/commons/query/QueryJson.java b/boot/platform/src/main/java/com/platform/boot/commons/query/QueryJson.java index f68de90f..477c593c 100644 --- a/boot/platform/src/main/java/com/platform/boot/commons/query/QueryJson.java +++ b/boot/platform/src/main/java/com/platform/boot/commons/query/QueryJson.java @@ -1,15 +1,14 @@ package com.platform.boot.commons.query; import com.google.common.base.CaseFormat; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import org.springframework.data.domain.Sort; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; -import java.util.Arrays; -import java.util.Map; -import java.util.Set; -import java.util.StringJoiner; +import java.util.*; import java.util.stream.Collectors; /** @@ -32,75 +31,100 @@ public class QueryJson { KEYWORDS.put("LTE", "<="); KEYWORDS.put("LessThan", "<"); KEYWORDS.put("LT", "<"); - KEYWORDS.put("Between", "BETWEEN"); - KEYWORDS.put("NotBetween", "NOT BETWEEN"); - KEYWORDS.put("NotIn", "NOT IN"); - KEYWORDS.put("In", "IN"); - KEYWORDS.put("IsNotNull", "IS NOT NULL"); - KEYWORDS.put("NotNull", "IS NOT NULL"); - KEYWORDS.put("IsNull", "IS NULL"); - KEYWORDS.put("Null", "IS NULL"); - KEYWORDS.put("NotLike", "NOT LIKE"); - KEYWORDS.put("Like", "LIKE"); - KEYWORDS.put("StartingWith", "LIKE"); - KEYWORDS.put("EndingWith", "LIKE"); - KEYWORDS.put("IsNotLike", "NOT LIKE"); - KEYWORDS.put("Containing", "LIKE"); - KEYWORDS.put("NotContaining", "NOT LIKE"); + KEYWORDS.put("Between", "between"); + KEYWORDS.put("NotBetween", "not between"); + KEYWORDS.put("NotIn", "not in"); + KEYWORDS.put("In", "in"); + KEYWORDS.put("IsNotNull", "is not null"); + KEYWORDS.put("NotNull", "is not null"); + KEYWORDS.put("IsNull", "is null"); + KEYWORDS.put("Null", "is null"); + KEYWORDS.put("NotLike", "not like"); + KEYWORDS.put("Like", "like"); + KEYWORDS.put("StartingWith", "like"); + KEYWORDS.put("EndingWith", "like"); + KEYWORDS.put("IsNotLike", "not like"); + KEYWORDS.put("Containing", "like"); + KEYWORDS.put("NotContaining", "not like"); KEYWORDS.put("Not", "!="); - KEYWORDS.put("IsTrue", "IS TRUE"); - KEYWORDS.put("True", "IS TRUE"); - KEYWORDS.put("IsFalse", "IS FALSE"); - KEYWORDS.put("False", "IS FALSE"); + KEYWORDS.put("IsTrue", "is true"); + KEYWORDS.put("True", "is true"); + KEYWORDS.put("IsFalse", "is false"); + KEYWORDS.put("False", "is false"); } - /** - * Generates a JSON query based on the provided parameters and returns a map - * of the generated SQL query and its corresponding parameters. - * - * @param params a map of key-value pairs representing the parameters for the query - * @return a map containing the generated SQL query and its parameters - */ - public static ParamSql queryJson(Map params) { + public static Sort sortJson(Sort sort, String prefix) { + if (sort == null || sort.isEmpty()) { + return Sort.unsorted(); + } + List orders = Lists.newArrayList(); + for (Sort.Order order : sort) { + String[] keys = StringUtils.delimitedListToStringArray(order.getProperty(), "."); + if (keys.length > 1) { + int lastIndex = keys.length - 1; + var sortReplaceArray = Arrays.copyOfRange(keys, 1, lastIndex); + String sortedProperty = keys[0]; + if (StringUtils.hasLength(prefix)) { + sortedProperty = prefix + "." + sortedProperty; + } + String sortReplace = sortedProperty + jsonPathKey(sortReplaceArray).append("->>'") + .append(keys[lastIndex]).append("'"); + orders.add(Sort.Order.by(sortReplace).with(order.getDirection())); + } else { + orders.add(order); + } + } + return Sort.by(orders); + } + + public static ParamSql queryJson(Map params, String prefix) { if (ObjectUtils.isEmpty(params)) { - return ParamSql.EMPTY; + return ParamSql.of(new StringJoiner(" AND "), Maps.newHashMap()); } Map bindParams = Maps.newHashMap(); StringJoiner whereSql = new StringJoiner(" and "); for (Map.Entry entry : params.entrySet()) { String[] keys = StringUtils.delimitedListToStringArray(entry.getKey(), "."); - Map.Entry exps = jsonPathKeyAndParamName(keys); + Map.Entry exps = jsonPathKeyAndParamName(keys, prefix); whereSql.add(exps.getValue()); bindParams.put(exps.getKey(), entry.getValue()); } return ParamSql.of(whereSql, bindParams); } - private static Map.Entry jsonPathKeyAndParamName(String[] keys) { - String lastKey = keys[keys.length - 1]; - String colum = keys[0]; - - Map.Entry exps = exitsKeyWords(lastKey); - - StringBuilder jsonPath = new StringBuilder(colum); - - String[] joinKeys = Arrays.copyOfRange(keys, 1, keys.length - 1); - for (String path : joinKeys) { - var capath = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, path); - jsonPath.append("->'").append(capath).append("'"); + private static Map.Entry jsonPathKeyAndParamName(String[] keys, String prefix) { + int lastIndex = keys.length - 1; + String column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, keys[0]); + if (StringUtils.hasLength(prefix)) { + column = prefix + "." + keys[0]; } + StringBuilder jsonPath = new StringBuilder(column); + String[] joinKeys = Arrays.copyOfRange(keys, 1, lastIndex); + jsonPath.append(jsonPathKey(joinKeys)); + String lastKey = keys[lastIndex]; + Map.Entry exps = exitsKeyWords(lastKey); String key = lastKey.substring(0, lastKey.length() - exps.getKey().length()); jsonPath.append("->>'").append(key).append("' "); + String paramName = StringUtils.arrayToDelimitedString(keys, "_"); if (!ObjectUtils.isEmpty(exps)) { jsonPath.append(exps.getValue()).append(" :").append(paramName); } else { jsonPath.append("=").append(" :").append(paramName); } + return Map.entry(paramName, jsonPath.toString()); } + private static StringBuilder jsonPathKey(String[] joinKeys) { + StringBuilder jsonPath = new StringBuilder(); + for (String path : joinKeys) { + jsonPath.append("->'").append(path).append("'"); + } + return jsonPath; + } + private static Map.Entry exitsKeyWords(String inputStr) { Set> entries = KEYWORDS.entrySet().stream() .filter(entry -> StringUtils.endsWithIgnoreCase(inputStr, entry.getKey())) diff --git a/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java b/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java index a2fa92c2..b2076511 100644 --- a/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java +++ b/boot/platform/src/main/java/com/platform/boot/commons/utils/CriteriaUtils.java @@ -3,6 +3,7 @@ import com.google.common.base.CaseFormat; import com.google.common.collect.Maps; import com.platform.boot.commons.query.ParamSql; +import com.platform.boot.commons.query.QueryJson; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.relational.core.query.Criteria; @@ -54,15 +55,17 @@ public static String applySort(Sort sort, String prefix) { if (sort == null || sort.isUnsorted()) { return ""; } + sort = QueryJson.sortJson(sort, prefix); StringJoiner sortSql = new StringJoiner(", "); - sort.iterator().forEachRemaining((o) -> { - String sortedPropertyName = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, o.getProperty()); - String sortedProperty = o.isIgnoreCase() ? "lower(" + sortedPropertyName + ")" : sortedPropertyName; + for (Sort.Order order : sort) { + String sortedPropertyName = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, order.getProperty()); + String sortedProperty = order.isIgnoreCase() ? "lower(" + sortedPropertyName + ")" : sortedPropertyName; if (StringUtils.hasLength(prefix)) { sortedProperty = prefix + "." + sortedProperty; } - sortSql.add(sortedProperty + (o.isAscending() ? " asc" : " desc")); - }); + sortSql.add(sortedProperty + (order.isAscending() ? " asc" : " desc")); + } + return " order by " + sortSql; } @@ -74,20 +77,38 @@ public static String applySort(Sort sort, String prefix) { * @param prefix the prefix for the SQL clause * @return the generated WHERE SQL clause */ + @SuppressWarnings("unchecked") public static ParamSql buildParamSql(Object object, Collection skipKeys, String prefix) { Map objectMap = BeanUtils.beanToMap(object, false, true); if (ObjectUtils.isEmpty(objectMap)) { - return ParamSql.EMPTY; + return ParamSql.of(new StringJoiner(" AND "), Maps.newHashMap()); + } + ParamSql jsonParamSql = QueryJson.queryJson((Map) objectMap.get("query"), prefix); + Map params = jsonParamSql.params(); + StringJoiner sql = jsonParamSql.sql(); + + if (!ObjectUtils.isEmpty(objectMap.get("securityCode"))) { + String key = "tenant_code"; + if (StringUtils.hasLength(prefix)) { + key = prefix + "." + key; + } + sql.add(key + " like :securityCode"); + params.put("securityCode", objectMap.get("securityCode")); } Set removeKeys = new HashSet<>(SKIP_CRITERIA_KEYS); + removeKeys.add("query"); + removeKeys.add("securityCode"); if (!ObjectUtils.isEmpty(skipKeys)) { removeKeys.addAll(skipKeys); } objectMap = Maps.filterKeys(objectMap, key -> !removeKeys.contains(key)); - return buildParamSql(objectMap, prefix); + ParamSql entityParamSql = buildParamSql(objectMap, prefix); + params.putAll(entityParamSql.params()); + sql.merge(entityParamSql.sql()); + return ParamSql.of(sql, params); } /** @@ -100,20 +121,20 @@ public static ParamSql buildParamSql(Object object, Collection skipKeys, public static ParamSql buildParamSql(Map objectMap, String prefix) { StringJoiner whereSql = new StringJoiner(" and "); for (Map.Entry entry : objectMap.entrySet()) { - String key = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, entry.getKey()); + String column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, entry.getKey()); if (StringUtils.hasLength(prefix)) { - key = prefix + "." + key; + column = prefix + "." + column; } Object value = entry.getValue(); String paramName = ":" + entry.getKey(); if (value instanceof String) { - whereSql.add(key + " like " + paramName); + whereSql.add(column + " like " + paramName); } else if (value instanceof Collection) { - whereSql.add(key + " in :" + paramName); + whereSql.add(column + " in :" + paramName); } else { - whereSql.add(key + " = " + paramName); + whereSql.add(column + " = " + paramName); } } return ParamSql.of(whereSql, objectMap); diff --git a/boot/platform/src/main/java/com/platform/boot/security/SecurityController.java b/boot/platform/src/main/java/com/platform/boot/security/SecurityController.java index 369ff1b6..5d87fa4d 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/SecurityController.java +++ b/boot/platform/src/main/java/com/platform/boot/security/SecurityController.java @@ -26,7 +26,6 @@ public class SecurityController { private final SecurityManager securityManager; - private final PasswordEncoder passwordEncoder; private final ServerOAuth2AuthorizedClientRepository clientRepository; diff --git a/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantRequest.java b/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantRequest.java index 92d68c2c..13e98e76 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantRequest.java +++ b/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantRequest.java @@ -1,15 +1,15 @@ package com.platform.boot.security.core.tenant; +import com.platform.boot.commons.query.ParamSql; import com.platform.boot.commons.utils.BeanUtils; import com.platform.boot.commons.utils.CriteriaUtils; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import org.springframework.data.relational.core.query.Criteria; -import org.springframework.util.StringUtils; import java.io.Serializable; -import java.util.Set; +import java.util.List; +import java.util.Map; /** * @author Alex bob @@ -19,6 +19,8 @@ @ToString(callSuper = true) public class TenantRequest extends Tenant implements Serializable { + private Map query; + private String securityCode; public TenantRequest securityCode(String securityCode) { @@ -30,14 +32,7 @@ public Tenant toTenant() { return BeanUtils.copyProperties(this, Tenant.class); } - public Criteria toCriteria() { - - Criteria criteria = CriteriaUtils.build(this, Set.of("securityCode")); - - if (StringUtils.hasLength(this.securityCode)) { - criteria = criteria.and("code").like(this.securityCode + "%"); - } - - return criteria; + public ParamSql bindParamSql() { + return CriteriaUtils.buildParamSql(this, List.of(), null); } } \ No newline at end of file diff --git a/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantsService.java b/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantsService.java index e073baa4..50778545 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantsService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/core/tenant/TenantsService.java @@ -1,14 +1,15 @@ package com.platform.boot.security.core.tenant; import com.platform.boot.commons.base.AbstractDatabase; +import com.platform.boot.commons.query.ParamSql; import com.platform.boot.commons.utils.BeanUtils; import com.platform.boot.commons.utils.ContextUtils; +import com.platform.boot.commons.utils.CriteriaUtils; import com.platform.boot.security.core.tenant.member.TenantMembersRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; -import org.springframework.data.relational.core.query.Query; import org.springframework.stereotype.Service; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -25,8 +26,9 @@ public class TenantsService extends AbstractDatabase { public Flux search(TenantRequest request, Pageable pageable) { var cacheKey = ContextUtils.cacheKey(request, pageable); - var query = Query.query(request.toCriteria()).with(pageable); - return super.queryWithCache(cacheKey, query, Tenant.class) + ParamSql paramSql = request.bindParamSql(); + String query = "select * from se_tenants" + paramSql.whereSql() + CriteriaUtils.applyPage(pageable); + return super.queryWithCache(cacheKey, query, paramSql.params(), Tenant.class) .flatMap(ContextUtils::serializeUserAuditor); } @@ -34,8 +36,9 @@ public Mono> page(TenantRequest request, Pageable pageable) { var tenantsMono = this.search(request, pageable).collectList(); var cacheKey = ContextUtils.cacheKey(request); - Query query = Query.query(request.toCriteria()); - var countMono = this.countWithCache(cacheKey, query, Tenant.class); + ParamSql paramSql = request.bindParamSql(); + String query = "select count(*) from se_tenants" + paramSql.whereSql() + CriteriaUtils.applyPage(pageable); + var countMono = this.countWithCache(cacheKey, query, paramSql.params()); return Mono.zip(tenantsMono, countMono) .map(tuple2 -> new PageImpl<>(tuple2.getT1(), pageable, tuple2.getT2())); diff --git a/boot/platform/src/main/java/com/platform/boot/security/core/user/User.java b/boot/platform/src/main/java/com/platform/boot/security/core/user/User.java index 92f9a2e7..61006cf2 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/core/user/User.java +++ b/boot/platform/src/main/java/com/platform/boot/security/core/user/User.java @@ -25,6 +25,9 @@ public class User implements BaseEntity { @NotBlank(message = "user code [code] cannot be empty!", groups = Update.class) private String code; + @NotBlank(message = "Tenant [tenantCode] not be empty!") + private String tenantCode; + @NotBlank(message = "Login username [username] cannot be empty!") @Pattern(regexp = "^[a-zA-Z0-9_-]{6,16}$", message = "Login username [username] must be " + "6 to 16 characters (letters, numbers, _, -)!") diff --git a/boot/platform/src/main/java/com/platform/boot/security/core/user/UserRequest.java b/boot/platform/src/main/java/com/platform/boot/security/core/user/UserRequest.java index a7e5e2c5..17f0228f 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/core/user/UserRequest.java +++ b/boot/platform/src/main/java/com/platform/boot/security/core/user/UserRequest.java @@ -1,7 +1,6 @@ package com.platform.boot.security.core.user; import com.platform.boot.commons.query.ParamSql; -import com.platform.boot.commons.query.QueryJson; import com.platform.boot.commons.utils.BeanUtils; import com.platform.boot.commons.utils.CriteriaUtils; import lombok.Data; @@ -22,17 +21,17 @@ public class UserRequest extends User { private Map query; + private String securityCode; + + public UserRequest securityCode(String securityCode) { + this.setSecurityCode(securityCode); + return this; + } public User toUser() { return BeanUtils.copyProperties(this, User.class); } public ParamSql bindParamSql() { - ParamSql rescues = CriteriaUtils.buildParamSql(this, List.of("query"), null); - var params = rescues.params(); - var sql = rescues.sql(); - ParamSql jsonParamSql = QueryJson.queryJson(this.getQuery()); - params.putAll(jsonParamSql.params()); - sql.merge(jsonParamSql.sql()); - return ParamSql.of(sql, params); + return CriteriaUtils.buildParamSql(this, List.of(), null); } } \ No newline at end of file diff --git a/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersController.java b/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersController.java index 991b3425..912b1647 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersController.java +++ b/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersController.java @@ -1,5 +1,6 @@ package com.platform.boot.security.core.user; +import com.platform.boot.commons.utils.ContextUtils; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -23,12 +24,14 @@ public class UsersController { @GetMapping("search") public Flux search(UserRequest request, Pageable pageable) { - return this.usersService.search(request, pageable); + return ContextUtils.securityDetails().flatMapMany(securityDetails -> + this.usersService.search(request.securityCode(securityDetails.getTenantCode()), pageable)); } @GetMapping("page") public Mono> page(UserRequest request, Pageable pageable) { - return this.usersService.page(request, pageable); + return ContextUtils.securityDetails().flatMap(securityDetails -> + this.usersService.page(request.securityCode(securityDetails.getTenantCode()), pageable)); } @PostMapping("add") diff --git a/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersService.java b/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersService.java index 1dd965fb..4a85dc0f 100644 --- a/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersService.java +++ b/boot/platform/src/main/java/com/platform/boot/security/core/user/UsersService.java @@ -3,7 +3,6 @@ import com.platform.boot.commons.base.AbstractDatabase; import com.platform.boot.commons.exception.RestServerException; import com.platform.boot.commons.query.ParamSql; -import com.platform.boot.commons.query.QueryJson; import com.platform.boot.commons.utils.BeanUtils; import com.platform.boot.commons.utils.ContextUtils; import com.platform.boot.commons.utils.CriteriaUtils; @@ -39,7 +38,7 @@ public Mono> page(UserRequest request, Pageable pageable) { var searchMono = this.search(request, pageable).collectList(); var cacheKey = ContextUtils.cacheKey(request); - ParamSql paramSql = QueryJson.queryJson(request.getQuery()); + ParamSql paramSql = request.bindParamSql(); String query = "select count(*) from se_users" + paramSql.whereSql(); var countMono = super.countWithCache(cacheKey, query, paramSql.params()); diff --git a/boot/platform/src/main/resources/data-postgres.sql b/boot/platform/src/main/resources/data-postgres.sql index b1d33cd7..b251d032 100644 --- a/boot/platform/src/main/resources/data-postgres.sql +++ b/boot/platform/src/main/resources/data-postgres.sql @@ -1,12 +1,13 @@ -insert into se_users(code, username, password, name, creator, updater, extend) -values ('U1000', 'admin', '{pbkdf2}7d8a68bc5d507bd19bc153ff10bcdef66f5a5f3d0c1ab2438630e50b5c65894bccc2c7e4404c5afa', - '系统超级管理员', 'U1000', 'U1000', '{}'); +insert into se_users(code, tenant_code, username, password, name, creator, updater) +values ('U1000', 'T1000', 'admin', + '{pbkdf2}7d8a68bc5d507bd19bc153ff10bcdef66f5a5f3d0c1ab2438630e50b5c65894bccc2c7e4404c5afa', + '系统超级管理员', 'U1000', 'U1000'); insert into se_authorities(code, user_code, authority, creator, updater) values ('UA1000', 'U1000', 'ROLE_ADMINISTRATORS', 'U1000', 'U1000'); -insert into se_groups(code, name, creator, updater) -values ('G1000', '默认组', 'U1000', 'U1000'); +insert into se_groups(code, tenant_code, name, creator, updater) +values ('G1000', 'T1000', '默认组', 'U1000', 'U1000'); insert into se_group_members(code, group_code, user_code, creator, updater) values ('GM1000', 'G1000', 'U1000', 'U1000', 'U1000'); @@ -15,21 +16,24 @@ insert into se_group_authorities(code, group_code, authority, creator, updater) values ('GA1000', 'G1000', 'ROLE_GROUPS_ADMINISTRATORS', 'U1000', 'U1000'); insert into se_tenants(code, name, creator, updater) -values ('T610115', '默认租户', 'U1000', 'U1000'); +values ('T1000', '默认租户', 'U1000', 'U1000'); insert into se_tenant_members(code, tenant_code, user_code, creator, updater) -values ('TM1000', 'T610115', 'U1000', 'U1000', 'U1000'); +values ('TM1000', 'T1000', 'U1000', 'U1000', 'U1000'); /********Init menus****************/ insert into se_menus(code, type, authority, name, path, creator, updater, extend) values ('M1000', 'FOLDER', 'ROLE_FOLDER_SYSTEM', '系统管理', '', 'U1000', 'U1000', '{ - "icons": "settings"}'); + "icons": "settings" +}'); insert into se_menus(code, pcode, type, authority, name, path, creator, updater, extend) values ('M1001', 'M1000', 'MENU', 'ROLE_MENU_SYSTEM_USERS', '用户管理', '/system/users', 'U1000', 'U1000', '{ - "icons": "lock"}'); + "icons": "lock" +}'); insert into se_menus(code, pcode, type, authority, name, path, creator, updater, extend) values ('M1002', 'M1000', 'MENU', 'ROLE_MENU_SYSTEM_GROUPS', '角色管理', '/system/groups', 'U1000', 'U1000', '{ - "icons": "users"}'); + "icons": "users" +}'); insert into se_menus(code, pcode, type, authority, name, path, creator, updater, extend) values ('M1003', 'M1000', 'MENU', 'ROLE_MENU_SYSTEM_MENUS', '菜单管理', '/system/menus', 'U1000', 'U1000', '{ "icons": "menu-2" diff --git a/boot/platform/src/main/resources/schema-postgres.sql b/boot/platform/src/main/resources/schema-postgres.sql index cab7f6d0..62bca11b 100644 --- a/boot/platform/src/main/resources/schema-postgres.sql +++ b/boot/platform/src/main/resources/schema-postgres.sql @@ -19,7 +19,7 @@ create table if not exists se_users ( id serial8 primary key, code varchar(64) not null unique, - tenant_code varchar(64) not null default '0', + tenant_code varchar(64) not null default 'T1000', username varchar(256) not null unique, password text not null, disabled boolean not null default false, @@ -61,7 +61,7 @@ create table if not exists se_groups ( id serial8 primary key, code varchar(64) not null unique, - tenant_code varchar(64) not null default '0', + tenant_code varchar(64) not null default 'T1000', name varchar(512) not null, extend jsonb, creator varchar(64), @@ -142,7 +142,7 @@ create table if not exists se_menus id serial8 primary key, code varchar(64) not null unique, pcode varchar(64) not null default '0', - tenant_code varchar(64) not null default '0', + tenant_code varchar(64) not null default 'T1000', type varchar(20) not null default 'MENU', authority varchar(512) not null unique, name varchar(512) not null, @@ -163,7 +163,7 @@ create table if not exists se_loggers ( id serial8 primary key, code varchar(64) not null unique, - tenant_code varchar(64) not null default '0', + tenant_code varchar(64) not null default 'T1000', prefix varchar(64), operator varchar(64), status varchar(64),