Add Keycloak group management for member portal access control
All checks were successful
Build And Push Image / docker (push) Successful in 3m53s

- Add portal access control section to EditMemberDialog for admins
- Implement API endpoints for managing member Keycloak groups
- Add group selection UI with user/board/admin access levels
- Enhance admin config with reload functionality
- Support real-time group synchronization and status feedback
This commit is contained in:
2025-08-13 16:31:54 +02:00
parent 5371ad4fa2
commit 4b1a77de90
12 changed files with 749 additions and 52 deletions

View File

@@ -28,8 +28,16 @@ export default defineEventHandler(async (event) => {
console.log('[api/admin/nocodb-config.get] Admin access confirmed for:', session.user.email);
// Get current configuration using the new admin config system
const { getCurrentConfig } = await import('~/server/utils/admin-config');
// Force reload and get current configuration using the new admin config system
const { getCurrentConfig, reloadAdminConfig } = await import('~/server/utils/admin-config');
// Force reload configuration to ensure we have the latest settings
try {
await reloadAdminConfig();
} catch (error) {
console.warn('[api/admin/nocodb-config.get] Failed to reload config, using cached version:', error);
}
const settings = await getCurrentConfig();
console.log('[api/admin/nocodb-config.get] ✅ Settings retrieved successfully');

View File

@@ -24,8 +24,16 @@ export default defineEventHandler(async (event) => {
console.log('[api/admin/recaptcha-config.get] Authorized admin:', session.user.email);
// Get reCAPTCHA configuration
const { getRecaptchaConfig } = await import('~/server/utils/admin-config');
// Force reload and get reCAPTCHA configuration
const { getRecaptchaConfig, reloadAdminConfig } = await import('~/server/utils/admin-config');
// Force reload configuration to ensure we have the latest settings
try {
await reloadAdminConfig();
} catch (error) {
console.warn('[api/admin/recaptcha-config.get] Failed to reload config, using cached version:', error);
}
const config = getRecaptchaConfig();
return {

View File

@@ -24,8 +24,16 @@ export default defineEventHandler(async (event) => {
console.log('[api/admin/registration-config.get] Authorized admin:', session.user.email);
// Get registration configuration
const { getRegistrationConfig } = await import('~/server/utils/admin-config');
// Force reload and get registration configuration
const { getRegistrationConfig, reloadAdminConfig } = await import('~/server/utils/admin-config');
// Force reload configuration to ensure we have the latest settings
try {
await reloadAdminConfig();
} catch (error) {
console.warn('[api/admin/registration-config.get] Failed to reload config, using cached version:', error);
}
const config = getRegistrationConfig();
return {

View File

@@ -24,9 +24,24 @@ export default defineEventHandler(async (event) => {
console.log('[api/admin/smtp-config.get] Authorized admin:', session.user.email);
// Get SMTP configuration
const { getSMTPConfig } = await import('~/server/utils/admin-config');
// Force reload and get SMTP configuration
const { getSMTPConfig, reloadAdminConfig } = await import('~/server/utils/admin-config');
// Force reload configuration to ensure we have the latest settings
try {
await reloadAdminConfig();
} catch (error) {
console.warn('[api/admin/smtp-config.get] Failed to reload config, using cached version:', error);
}
const config = getSMTPConfig();
console.log('[api/admin/smtp-config.get] Current SMTP config status:', {
host: config.host || 'not set',
port: config.port || 'not set',
hasUsername: !!config.username,
hasPassword: !!config.password,
fromAddress: config.fromAddress || 'not set'
});
// Hide password for security
const safeConfig = {