权限入口单元测试修改 使用单独的表测试

This commit is contained in:
bf109f 2023-12-17 21:47:03 +08:00
parent 31a58c8b7f
commit 211ae4cd87
5 changed files with 116 additions and 53 deletions

View File

@ -42,11 +42,6 @@ public class Account {
@Column(isLogicDelete = true) @Column(isLogicDelete = true)
private Boolean isDelete; private Boolean isDelete;
/**
* 创建人
*/
private String insertUserId;
public Long getId() { public Long getId() {
return id; return id;
@ -103,12 +98,4 @@ public class Account {
public void setDelete(Boolean delete) { public void setDelete(Boolean delete) {
isDelete = delete; isDelete = delete;
} }
public String getInsertUserId() {
return insertUserId;
}
public void setInsertUserId(String insertUserId) {
this.insertUserId = insertUserId;
}
} }

View File

@ -6,12 +6,14 @@ import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.row.Row; import com.mybatisflex.core.row.Row;
import com.mybatisflex.core.row.RowKey; import com.mybatisflex.core.row.RowKey;
import com.mybatisflex.core.row.RowUtil;
import com.mybatisflex.core.table.TableInfoFactory; import com.mybatisflex.core.table.TableInfoFactory;
import com.mybatisflex.coretest.auth.AuthDialectImpl; import com.mybatisflex.coretest.auth.AuthDialectImpl;
import com.mybatisflex.coretest.auth.Project;
import com.mybatisflex.coretest.auth.table.ProjectTableDef;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import static com.mybatisflex.coretest.auth.table.ProjectTableDef.PROJECT;
import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT; import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT;
/** /**
@ -32,58 +34,57 @@ public class AuthTest {
@Test @Test
public void test() { public void test() {
// 1.单个删除 // 1.单个删除
assert "DELETE FROM `tb_account` WHERE `id` = ? AND `insert_user_id` = 1" assert "DELETE FROM `tb_project` WHERE `id` = ? AND `insert_user_id` = 1"
.equals(dialect.forDeleteById(ACCOUNT.getSchema(), ACCOUNT.getTableName(), new String[]{ACCOUNT.ID.getName()})); .equals(dialect.forDeleteById(PROJECT.getSchema(), PROJECT.getTableName(), new String[]{PROJECT.ID.getName()}));
// 2.批量删除 // 2.批量删除
assert "DELETE FROM `tb_account` WHERE `id` = ? AND `insert_user_id` = 1" assert "DELETE FROM `tb_project` WHERE `id` = ? AND `insert_user_id` = 1"
.equals(dialect.forDeleteBatchByIds(ACCOUNT.getSchema(), ACCOUNT.getTableName(), new String[]{ACCOUNT.ID.getName()}, new Object[]{1L})); .equals(dialect.forDeleteBatchByIds(PROJECT.getSchema(), PROJECT.getTableName(), new String[]{PROJECT.ID.getName()}, new Object[]{1L}));
// 3.查询 // 3.查询
QueryWrapper deleteWrapper = QueryWrapper deleteWrapper =
QueryWrapper.create(new Account()).where(ACCOUNT.ID.eq(1)); QueryWrapper.create(new Project()).where(PROJECT.ID.eq(1));
assert "DELETE FROM `tb_account` WHERE `id` = ? AND `sex` = ? AND `is_normal` = ? AND `insert_user_id` = ?" assert "DELETE FROM `tb_project` WHERE `id` = ? AND `insert_user_id` = ?"
.equals(dialect.forDeleteByQuery(deleteWrapper)); .equals(dialect.forDeleteByQuery(deleteWrapper));
// 4.更新 // 4.更新
assert "UPDATE `tb_account` SET `age` = ? WHERE `id` = ? AND `insert_user_id` = 1" assert "UPDATE `tb_project` SET `name` = ? WHERE `id` = ? AND `insert_user_id` = 1"
.equals(dialect.forUpdateById(ACCOUNT.getSchema(), ACCOUNT.getTableName(), .equals(dialect.forUpdateById(PROJECT.getSchema(), PROJECT.getTableName(),
Row.ofKey(RowKey.AUTO).set(ACCOUNT.AGE, 18))); Row.ofKey(RowKey.AUTO).set(PROJECT.NAME, "项目")));
// 5.更新 // 5.更新
Row row = new Row(); Row row = new Row();
row.set(ACCOUNT.AGE, 18); row.set(PROJECT.NAME, "项目");
QueryWrapper updateWrapper = QueryWrapper updateWrapper =
QueryWrapper.create(new Account()).where(ACCOUNT.ID.eq(1)); QueryWrapper.create(new Project()).where(PROJECT.ID.eq(1));
assert "UPDATE `tb_account` SET `age` = ? WHERE `id` = ? AND `sex` = ? AND `is_normal` = ? AND `insert_user_id` = ?" assert "UPDATE `tb_project` SET `name` = ? WHERE `id` = ? AND `insert_user_id` = ?"
.equals(dialect.forUpdateByQuery(updateWrapper, row)); .equals(dialect.forUpdateByQuery(updateWrapper, row));
// 6.ID查询 // 6.ID查询
assert "SELECT * FROM `tb_account` WHERE `id` = ? AND `insert_user_id` = 1" assert "SELECT * FROM `tb_project` WHERE `id` = ? AND `insert_user_id` = 1"
.equals(dialect.forSelectOneById(ACCOUNT.getSchema(), ACCOUNT.getTableName(), new String[]{ACCOUNT.ID.getName()}, new Object[]{1L})); .equals(dialect.forSelectOneById(PROJECT.getSchema(), PROJECT.getTableName(), new String[]{PROJECT.ID.getName()}, new Object[]{1L}));
QueryWrapper queryWrapper = QueryWrapper queryWrapper = QueryWrapper.create(new Project()).where(PROJECT.ID.eq(1));
QueryWrapper.create().select(ACCOUNT.ALL_COLUMNS).where(ACCOUNT.ID.eq(1));
// 7.query查询 // 7.query查询
assert "SELECT * FROM WHERE `id` = ? AND `insert_user_id` = ?" assert "SELECT `id`, `name`, `insert_user_id`, `is_delete` FROM `tb_project` WHERE `id` = ? AND `insert_user_id` = ?"
.equals(dialect.forSelectByQuery(queryWrapper)); .equals(dialect.forSelectByQuery(queryWrapper));
// 8.删除 // 8.删除
assert "UPDATE `tb_account` SET `is_delete` = 1 WHERE `id` = ? AND `is_delete` = 0 AND `insert_user_id` = 1" assert "UPDATE `tb_project` SET `is_delete` = 1 WHERE `id` = ? AND `is_delete` = 0 AND `insert_user_id` = 1"
.equals(dialect.forDeleteEntityById(TableInfoFactory.ofEntityClass(Account.class))); .equals(dialect.forDeleteEntityById(TableInfoFactory.ofEntityClass(Project.class)));
// 9.批量删除 // 9.批量删除
assert "UPDATE `tb_account` SET `is_delete` = 1 WHERE (`id` = ? ) AND `is_delete` = 0 AND `insert_user_id` = 1" assert "UPDATE `tb_project` SET `is_delete` = 1 WHERE (`id` = ? ) AND `is_delete` = 0 AND `insert_user_id` = 1"
.equals(dialect.forDeleteEntityBatchByIds(TableInfoFactory.ofEntityClass(Account.class), new String[]{ACCOUNT.ID.getName()})); .equals(dialect.forDeleteEntityBatchByIds(TableInfoFactory.ofEntityClass(Project.class), new String[]{PROJECT.ID.getName()}));
// 10.query删除 // 10.query删除
assert "UPDATE `tb_account` SET `is_delete` = 1 WHERE `id` = ? AND `insert_user_id` = ? AND `insert_user_id` = ?" assert "UPDATE `tb_project` SET `is_delete` = 1 WHERE `id` = ? AND `insert_user_id` = ? AND `insert_user_id` = ?"
.equals(dialect.forDeleteEntityBatchByQuery(TableInfoFactory.ofEntityClass(Account.class), queryWrapper)); .equals(dialect.forDeleteEntityBatchByQuery(TableInfoFactory.ofEntityClass(Project.class), queryWrapper));
// 11.更新 // 11.更新
Account account = new Account(); Project project = new Project();
account.setAge(18); project.setName("项目名称");
assert "UPDATE `tb_account` SET `sex` = ? , `age` = ? , `is_normal` = ? WHERE `id` = ? AND `is_delete` = 0 AND `insert_user_id` = 1" assert "UPDATE `tb_project` SET `name` = ? WHERE `id` = ? AND `is_delete` = 0 AND `insert_user_id` = 1"
.equals(dialect.forUpdateEntity(TableInfoFactory.ofEntityClass(Account.class), account, true)); .equals(dialect.forUpdateEntity(TableInfoFactory.ofEntityClass(Project.class), project, true));
// 12.更新 // 12.更新
assert "UPDATE `tb_account` SET `sex` = ? , `age` = ? , `is_normal` = ? WHERE `id` = ? AND `insert_user_id` = ? AND `insert_user_id` = ? AND `insert_user_id` = ?" assert "UPDATE `tb_project` SET `name` = ? WHERE `id` = ? AND `insert_user_id` = ? AND `insert_user_id` = ? AND `insert_user_id` = ?"
.equals(dialect.forUpdateEntityByQuery(TableInfoFactory.ofEntityClass(Account.class), account, true, queryWrapper)); .equals(dialect.forUpdateEntityByQuery(TableInfoFactory.ofEntityClass(Project.class), project, true, queryWrapper));
// 13.ID查询 // 13.ID查询
assert "SELECT * FROM `tb_account` WHERE `id` = ? AND `is_delete` = 0 AND `insert_user_id` = 1" assert "SELECT * FROM `tb_project` WHERE `id` = ? AND `is_delete` = 0 AND `insert_user_id` = 1"
.equals(dialect.forSelectOneEntityById(TableInfoFactory.ofEntityClass(Account.class))); .equals(dialect.forSelectOneEntityById(TableInfoFactory.ofEntityClass(Project.class)));
// 14.查询 // 14.查询
assert "SELECT `id`, `user_name`, `birthday`, `sex`, `age`, `is_normal`, `is_delete`, `insert_user_id` FROM `tb_account` WHERE (`id` = ? ) AND `is_delete` = 0 AND `insert_user_id` = 1" assert "SELECT `id`, `name`, `insert_user_id`, `is_delete` FROM `tb_project` WHERE (`id` = ? ) AND `is_delete` = 0 AND `insert_user_id` = 1"
.equals(dialect.forSelectEntityListByIds(TableInfoFactory.ofEntityClass(Account.class), new String[]{ACCOUNT.ID.getName()})); .equals(dialect.forSelectEntityListByIds(TableInfoFactory.ofEntityClass(Project.class), new String[]{PROJECT.ID.getName()}));
} }
@Test @Test

View File

@ -111,7 +111,6 @@ public class LambdaSqlTest {
" ` ac `.` age `,\n" + " ` ac `.` age `,\n" +
" ` ac `.` is_normal `,\n" + " ` ac `.` is_normal `,\n" +
" ` ac `.` is_delete `,\n" + " ` ac `.` is_delete `,\n" +
" ` ac `.` insert_user_id `,\n" +
" ` ar `.` title `,\n" + " ` ar `.` title `,\n" +
" ` ar `.` content `\n" + " ` ar `.` content `\n" +
"FROM\n" + "FROM\n" +
@ -139,7 +138,6 @@ public class LambdaSqlTest {
" ` ac `.` age `,\n" + " ` ac `.` age `,\n" +
" ` ac `.` is_normal `,\n" + " ` ac `.` is_normal `,\n" +
" ` ac `.` is_delete `,\n" + " ` ac `.` is_delete `,\n" +
" ` ac `.` insert_user_id `,\n" +
" ` ar `.*\n" + " ` ar `.*\n" +
"FROM\n" + "FROM\n" +
" ` tb_account ` AS ` ac `\n" + " ` tb_account ` AS ` ac `\n" +

View File

@ -2,12 +2,16 @@ package com.mybatisflex.coretest.auth;
import com.mybatisflex.core.dialect.OperateType; import com.mybatisflex.core.dialect.OperateType;
import com.mybatisflex.core.dialect.impl.CommonsDialectImpl; import com.mybatisflex.core.dialect.impl.CommonsDialectImpl;
import com.mybatisflex.core.query.CPI;
import com.mybatisflex.core.query.QueryTable;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.table.TableInfo; import com.mybatisflex.core.table.TableInfo;
import java.util.List;
import static com.mybatisflex.core.constant.SqlConsts.AND; import static com.mybatisflex.core.constant.SqlConsts.AND;
import static com.mybatisflex.core.constant.SqlConsts.EQUALS; import static com.mybatisflex.core.constant.SqlConsts.EQUALS;
import static com.mybatisflex.coretest.table.AccountTableDef.ACCOUNT; import static com.mybatisflex.coretest.auth.table.ProjectTableDef.PROJECT;
/** /**
* 权限处理 * 权限处理
@ -16,19 +20,28 @@ public class AuthDialectImpl extends CommonsDialectImpl {
@Override @Override
public void prepareAuth(QueryWrapper queryWrapper, OperateType operateType) { public void prepareAuth(QueryWrapper queryWrapper, OperateType operateType) {
queryWrapper.and(ACCOUNT.INSERT_USER_ID.eq(1)); List<QueryTable> queryTables = CPI.getQueryTables(queryWrapper);
for (QueryTable queryTable : queryTables) {
if (PROJECT.getTableName().equals(queryTable.getName())) {
queryWrapper.and(PROJECT.INSERT_USER_ID.eq(1));
}
}
super.prepareAuth(queryWrapper, operateType); super.prepareAuth(queryWrapper, operateType);
} }
@Override @Override
public void prepareAuth(String schema, String tableName, StringBuilder sql, OperateType operateType) { public void prepareAuth(String schema, String tableName, StringBuilder sql, OperateType operateType) {
if (PROJECT.getTableName().equals(tableName)) {
sql.append(AND).append(wrap("insert_user_id")).append(EQUALS).append(1); sql.append(AND).append(wrap("insert_user_id")).append(EQUALS).append(1);
}
super.prepareAuth(schema, tableName, sql, operateType); super.prepareAuth(schema, tableName, sql, operateType);
} }
@Override @Override
public void prepareAuth(TableInfo tableInfo, StringBuilder sql, OperateType operateType) { public void prepareAuth(TableInfo tableInfo, StringBuilder sql, OperateType operateType) {
if (PROJECT.getTableName().equals(tableInfo.getTableName())) {
sql.append(AND).append(wrap("insert_user_id")).append(EQUALS).append(1); sql.append(AND).append(wrap("insert_user_id")).append(EQUALS).append(1);
}
super.prepareAuth(tableInfo, sql, operateType); super.prepareAuth(tableInfo, sql, operateType);
} }
} }

View File

@ -0,0 +1,64 @@
package com.mybatisflex.coretest.auth;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.NoneListener;
import com.mybatisflex.annotation.Table;
/**
* 权限测试类
*
* @author zhang
* @since 2023-12-17
*/
@Table(value = "tb_project", onUpdate = NoneListener.class)
public class Project {
@Id
private Long id;
/**
* 项目名称
*/
private String name;
/**
* 创建人
*/
private String insertUserId;
@Column(isLogicDelete = true)
private Boolean isDelete;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInsertUserId() {
return insertUserId;
}
public void setInsertUserId(String insertUserId) {
this.insertUserId = insertUserId;
}
public Boolean getDelete() {
return isDelete;
}
public void setDelete(Boolean delete) {
isDelete = delete;
}
}