fix: exempt admins from default user group limits

This commit is contained in:
fawney19
2026-05-11 18:20:01 +08:00
parent 9bed5e9f83
commit fed676f54f
19 changed files with 264 additions and 20 deletions

View File

@@ -99,4 +99,5 @@ VALUES (
INSERT IGNORE INTO user_group_members (group_id, user_id, created_at)
SELECT '00000000-0000-0000-0000-000000000001', id, UNIX_TIMESTAMP()
FROM users
WHERE is_deleted = 0;
WHERE is_deleted = 0
AND LOWER(role) <> 'admin';

View File

@@ -0,0 +1,12 @@
DELETE member
FROM user_group_members AS member
JOIN users ON users.id = member.user_id
WHERE LOWER(users.role) = 'admin'
AND (
member.group_id = '00000000-0000-0000-0000-000000000001'
OR member.group_id IN (
SELECT TRIM(BOTH '"' FROM value)
FROM system_configs
WHERE `key` = 'default_user_group_id'
)
);

View File

@@ -98,4 +98,5 @@ INSERT INTO public.user_group_members (group_id, user_id)
SELECT '00000000-0000-0000-0000-000000000001', id
FROM public.users
WHERE is_deleted IS FALSE
AND LOWER(role) <> 'admin'
ON CONFLICT (group_id, user_id) DO NOTHING;

View File

@@ -0,0 +1,12 @@
DELETE FROM public.user_group_members AS member
USING public.users AS users
WHERE member.user_id = users.id
AND LOWER(users.role) = 'admin'
AND (
member.group_id = '00000000-0000-0000-0000-000000000001'
OR member.group_id IN (
SELECT value #>> '{}'
FROM public.system_configs
WHERE key = 'default_user_group_id'
)
);

View File

@@ -97,4 +97,5 @@ VALUES (
INSERT OR IGNORE INTO user_group_members (group_id, user_id, created_at)
SELECT '00000000-0000-0000-0000-000000000001', id, CAST(strftime('%s', 'now') AS INTEGER)
FROM users
WHERE is_deleted = 0;
WHERE is_deleted = 0
AND LOWER(role) <> 'admin';

View File

@@ -0,0 +1,14 @@
DELETE FROM user_group_members
WHERE user_id IN (
SELECT id
FROM users
WHERE LOWER(role) = 'admin'
)
AND (
group_id = '00000000-0000-0000-0000-000000000001'
OR group_id IN (
SELECT TRIM(value, '"')
FROM system_configs
WHERE key = 'default_user_group_id'
)
);

View File

@@ -37,6 +37,7 @@ INSERT INTO public.user_group_members (group_id, user_id)
SELECT '00000000-0000-0000-0000-000000000001', id
FROM public.users
WHERE is_deleted IS FALSE
AND LOWER(role) <> 'admin'
ON CONFLICT (group_id, user_id) DO NOTHING;
SELECT pg_catalog.set_config('search_path', 'public', true);

View File

@@ -7,7 +7,7 @@ use tracing::info;
// Generated by build.rs from schema/bootstrap/postgres.
pub(crate) static EMPTY_DATABASE_SNAPSHOT_SQL: &str =
include_str!(concat!(env!("OUT_DIR"), "/empty_database_snapshot.sql"));
pub(crate) const EMPTY_DATABASE_SNAPSHOT_CUTOFF_VERSION: i64 = 20260511000000;
pub(crate) const EMPTY_DATABASE_SNAPSHOT_CUTOFF_VERSION: i64 = 20260511120000;
const PUBLIC_BASE_TABLE_COUNT_SQL: &str = r#"
SELECT COUNT(*)::BIGINT

View File

@@ -299,6 +299,7 @@ fn empty_database_snapshot_covers_current_cutoff_versions() {
20260510000000,
20260510120000,
20260511000000,
20260511120000,
]
);
}
@@ -562,7 +563,8 @@ fn mysql_and_sqlite_migrations_include_enabled_incrementals() {
20260508000000,
20260509000000,
20260509120000,
20260510120000
20260510120000,
20260511120000
]
);
assert_eq!(
@@ -573,7 +575,8 @@ fn mysql_and_sqlite_migrations_include_enabled_incrementals() {
20260508000000,
20260509000000,
20260509120000,
20260510120000
20260510120000,
20260511120000
]
);
}
@@ -1084,6 +1087,7 @@ fn pending_migrations_from_applied_skips_versions_already_applied() {
20260510000000,
20260510120000,
20260511000000,
20260511120000,
]
);
}