权限门禁:补齐住宿与门禁最小权限迁移
This commit is contained in:
1 parent
f8ca87cfab
commit
84e1972947
2 files changed
+185
No files matched your search
+64
@@ -0,0 +1,64 @@
|
||||
package com.ruoyi.web.controller.train;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 014 DMS 门禁安全与住宿权限 Migration 契约测试 (Package A)
|
||||
*/
|
||||
public class DmsAccessSafetyPackageAMigrationContractTest
|
||||
{
|
||||
@Test
|
||||
public void migration014CompliesWithPackageASecurityRequirements() throws Exception
|
||||
{
|
||||
String sql = new String(Files.readAllBytes(findMigration()), StandardCharsets.UTF_8).toLowerCase();
|
||||
|
||||
// 必须包含住宿分配权限与门禁管理页面注册
|
||||
assertContains(sql,
|
||||
"2060", "'auth'", "'train/auth/index'", "train:access:query",
|
||||
"2264", "train:accommodation:add",
|
||||
"2191", "train:access:query",
|
||||
"2192", "train:access:manage",
|
||||
"2193", "train:access:reconcile");
|
||||
|
||||
// 必须授权给 train_admin (role_id = 3)
|
||||
assertContains(sql,
|
||||
"select 3, 2060",
|
||||
"select 3, 2191",
|
||||
"select 3, 2192",
|
||||
"select 3, 2193",
|
||||
"select 3, 2264");
|
||||
|
||||
// 必须包含后置断言防护
|
||||
assertContains(sql,
|
||||
"do $$", "raise exception", "train:accommodation:remove");
|
||||
|
||||
// 严禁赋予 train_admin 任何删除住宿权限或远程开锁
|
||||
assertFalse("must not grant remove permissions", sql.contains("select 3, 2265") || sql.contains("train:accommodation:remove' into"));
|
||||
assertFalse("must not contain remote unlock", sql.contains("remoteunlock") || sql.contains("remote-unlock"));
|
||||
}
|
||||
|
||||
private Path findMigration()
|
||||
{
|
||||
for (Path path = Paths.get("").toAbsolutePath(); path != null; path = path.getParent())
|
||||
{
|
||||
Path candidate = path.resolve("sql/system/kingbase/014_dms_access_safety_and_accommodation_permissions.sql");
|
||||
if (Files.isRegularFile(candidate)) return candidate;
|
||||
}
|
||||
throw new IllegalStateException("014_dms_access_safety_and_accommodation_permissions.sql migration not found from working directory");
|
||||
}
|
||||
|
||||
private void assertContains(String sql, String... tokens)
|
||||
{
|
||||
for (String token : tokens)
|
||||
{
|
||||
assertTrue("missing migration token: " + token, sql.contains(token));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user