From 0860e3c4da51927017bda5ce86d4e5fb9b782248 Mon Sep 17 00:00:00 2001 From: Bennett Date: Tue, 1 Sep 2026 00:58:59 +0300 Subject: [PATCH 1/3] Improve whatsapp --- .../entities/connector/ConnectorConfig.java | 9 ++++--- .../core/entities/finance/Wallet.java | 9 ++++--- .../core/entities/sms/SmsConnector.java | 9 ++++--- .../flextuma/core/entities/sms/SmsLog.java | 9 ++++--- .../whatsapp/WhatsAppWebhookConfig.java | 6 +++-- .../core/services/DataSeederService.java | 24 ++++++++++++++++++- .../controllers/SystemLogController.java | 2 +- 7 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/flexcodelabs/flextuma/core/entities/connector/ConnectorConfig.java b/src/main/java/com/flexcodelabs/flextuma/core/entities/connector/ConnectorConfig.java index 704ccbb..d487fd8 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/entities/connector/ConnectorConfig.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/entities/connector/ConnectorConfig.java @@ -39,11 +39,10 @@ public class ConnectorConfig extends Owner { public static final String NAME_PLURAL = "ConnectorConfigs"; public static final String NAME_SINGULAR = "ConnectorConfig"; - public static final String ALL = "ALL"; - public static final String READ = ALL; - public static final String ADD = ALL; - public static final String DELETE = ALL; - public static final String UPDATE = ALL; + public static final String READ = "READ_CONNECTOR_CONFIGS"; + public static final String ADD = "ADD_CONNECTOR_CONFIGS"; + public static final String DELETE = "DELETE_CONNECTOR_CONFIGS"; + public static final String UPDATE = "UPDATE_CONNECTOR_CONFIGS"; @Column(nullable = false, unique = true, name = "tenantid") @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) diff --git a/src/main/java/com/flexcodelabs/flextuma/core/entities/finance/Wallet.java b/src/main/java/com/flexcodelabs/flextuma/core/entities/finance/Wallet.java index cb981de..bd6b97a 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/entities/finance/Wallet.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/entities/finance/Wallet.java @@ -24,11 +24,10 @@ public class Wallet extends Owner { public static final String NAME_PLURAL = "Wallets"; public static final String NAME_SINGULAR = "Wallet"; - public static final String ALL = "ALL"; - public static final String READ = ALL; - public static final String ADD = ALL; - public static final String DELETE = ALL; - public static final String UPDATE = ALL; + public static final String READ = "READ_WALLETS"; + public static final String ADD = "ADD_WALLETS"; + public static final String DELETE = "DELETE_WALLETS"; + public static final String UPDATE = "UPDATE_WALLETS"; @Column(nullable = false, precision = 19, scale = 4) private BigDecimal balance = BigDecimal.ZERO; diff --git a/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsConnector.java b/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsConnector.java index fc6eb7b..80bec06 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsConnector.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsConnector.java @@ -22,11 +22,10 @@ public class SmsConnector extends Owner { public static final String NAME_PLURAL = "SMS Connectors"; public static final String NAME_SINGULAR = "SMS Connector"; - public static final String ALL = "ALL"; - public static final String READ = ALL; - public static final String ADD = ALL; - public static final String DELETE = ALL; - public static final String UPDATE = ALL; + public static final String READ = "READ_SMS_CONNECTORS"; + public static final String ADD = "ADD_SMS_CONNECTORS"; + public static final String DELETE = "DELETE_SMS_CONNECTORS"; + public static final String UPDATE = "UPDATE_SMS_CONNECTORS"; @NotBlank(message = "Provider name is required") private String provider; diff --git a/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsLog.java b/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsLog.java index ccb4629..015f154 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsLog.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/entities/sms/SmsLog.java @@ -38,11 +38,10 @@ public class SmsLog extends Owner { public static final String NAME_PLURAL = "SmsLogs"; public static final String NAME_SINGULAR = "SmsLog"; - public static final String ALL = "ALL"; - public static final String READ = ALL; - public static final String ADD = ALL; - public static final String DELETE = ALL; - public static final String UPDATE = ALL; + public static final String READ = "READ_SMS_LOGS"; + public static final String ADD = "ADD_SMS_LOGS"; + public static final String DELETE = "DELETE_SMS_LOGS"; + public static final String UPDATE = "UPDATE_SMS_LOGS"; private String recipient; diff --git a/src/main/java/com/flexcodelabs/flextuma/core/entities/whatsapp/WhatsAppWebhookConfig.java b/src/main/java/com/flexcodelabs/flextuma/core/entities/whatsapp/WhatsAppWebhookConfig.java index bdb98c7..8e467f4 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/entities/whatsapp/WhatsAppWebhookConfig.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/entities/whatsapp/WhatsAppWebhookConfig.java @@ -22,8 +22,10 @@ public class WhatsAppWebhookConfig extends Owner { public static final String PLURAL = "whatsappWebhookConfigs"; public static final String NAME_PLURAL = "WhatsApp Webhook Configurations"; public static final String NAME_SINGULAR = "WhatsApp Webhook Configuration"; - public static final String ALL = "ALL"; - public static final String READ = ALL, ADD = ALL, DELETE = ALL, UPDATE = ALL; + public static final String READ = "READ_WHATSAPP_WEBHOOK_CONFIGS"; + public static final String ADD = "ADD_WHATSAPP_WEBHOOK_CONFIGS"; + public static final String DELETE = "DELETE_WHATSAPP_WEBHOOK_CONFIGS"; + public static final String UPDATE = "UPDATE_WHATSAPP_WEBHOOK_CONFIGS"; @NotBlank @Column(name = "phone_number_id", nullable = false) diff --git a/src/main/java/com/flexcodelabs/flextuma/core/services/DataSeederService.java b/src/main/java/com/flexcodelabs/flextuma/core/services/DataSeederService.java index 4adca18..01b9daf 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/services/DataSeederService.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/services/DataSeederService.java @@ -7,6 +7,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.UUID; @Slf4j @@ -46,6 +48,8 @@ public void seedSystemData() { roleId, privId); log.info("🔗 Role-Privilege linking result: {} rows affected", userPrivResult); + seedReadPrivileges(); + seedUser(roleId, "admin", "admin@flextuma.com", "Admin123", roleId); seedUser(UUID.fromString("7269df24-68a0-4776-bd89-4015521bc19d"), "SYSTEM", @@ -58,6 +62,24 @@ public void seedSystemData() { } } + private void seedReadPrivileges() { + List.of( + "READ_SMS_CONNECTORS", + "READ_CONNECTOR_CONFIGS", + "READ_WALLETS", + "READ_SMS_LOGS", + "READ_WHATSAPP_WEBHOOK_CONFIGS", + "READ_SYSTEM_LOGS") + .forEach(value -> { + UUID id = UUID.nameUUIDFromBytes(value.getBytes(StandardCharsets.UTF_8)); + jdbcTemplate.update( + "INSERT INTO privilege (id, name, value, system, active, created, updated) " + + "VALUES (?, ?, ?, true, true, NOW(), NOW()) " + + "ON CONFLICT (value) DO NOTHING", + id, value.replace('_', ' '), value); + }); + } + private void seedUser(UUID userId, String username, String email, String pass, UUID roleId) { log.info("👤 Seeding user: {} ({})", username, email); String hashedPass = passwordEncoder.encode(pass); @@ -79,4 +101,4 @@ private void seedUser(UUID userId, String username, String email, String pass, U userId, roleId); log.info("🔗 User-Role linking result for {}: {} rows affected", username, userRoleResult); } -} \ No newline at end of file +} diff --git a/src/main/java/com/flexcodelabs/flextuma/modules/logging/controllers/SystemLogController.java b/src/main/java/com/flexcodelabs/flextuma/modules/logging/controllers/SystemLogController.java index 108f037..a1c6b1e 100644 --- a/src/main/java/com/flexcodelabs/flextuma/modules/logging/controllers/SystemLogController.java +++ b/src/main/java/com/flexcodelabs/flextuma/modules/logging/controllers/SystemLogController.java @@ -20,7 +20,7 @@ @RestController @RequestMapping("/api/systemLogs") @RequiredArgsConstructor -@PreAuthorize("hasAnyAuthority('SUPER_ADMIN', 'ALL')") +@PreAuthorize("hasAnyAuthority('SUPER_ADMIN', 'READ_SYSTEM_LOGS')") public class SystemLogController { private final SystemLogService systemLogService; From 15d77ad9d6751be7f6cfd4d3f25043df9bea49bb Mon Sep 17 00:00:00 2001 From: Bennett Date: Wed, 2 Sep 2026 15:56:45 +0300 Subject: [PATCH 2/3] release: Improve restrictions --- .../flexcodelabs/flextuma/core/services/BaseService.java | 2 +- .../flextuma/core/services/BaseServiceTest.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/flexcodelabs/flextuma/core/services/BaseService.java b/src/main/java/com/flexcodelabs/flextuma/core/services/BaseService.java index 7edd33d..8393ae5 100644 --- a/src/main/java/com/flexcodelabs/flextuma/core/services/BaseService.java +++ b/src/main/java/com/flexcodelabs/flextuma/core/services/BaseService.java @@ -98,7 +98,7 @@ protected void checkPermission(String requiredPermission) { boolean isAuthorized = authorities.contains("SUPER_ADMIN") || authorities.contains(requiredPermission) || - requiredPermission.equals("ALL"); + (!isAdminEntity() && authorities.contains("ALL")); if (!isAuthorized) { throw new AccessDeniedException("You have no permission to access " + getEntityPlural()); diff --git a/src/test/java/com/flexcodelabs/flextuma/core/services/BaseServiceTest.java b/src/test/java/com/flexcodelabs/flextuma/core/services/BaseServiceTest.java index 409b6fa..195485c 100644 --- a/src/test/java/com/flexcodelabs/flextuma/core/services/BaseServiceTest.java +++ b/src/test/java/com/flexcodelabs/flextuma/core/services/BaseServiceTest.java @@ -164,6 +164,15 @@ void checkPermission_shouldThrowException_whenNoPermission() { assertThrows(AccessDeniedException.class, () -> service.findAll()); } + @Test + void checkPermission_shouldAllowAllForNonAdminEntities() { + mockPermissions(Set.of("ALL")); + when(currentUserResolver.getCurrentUser()).thenReturn(Optional.empty()); + when(executor.findAll(any(Specification.class))).thenReturn(List.of()); + + assertDoesNotThrow(() -> service.findAll()); + } + @Test @SuppressWarnings("unchecked") void getEntityFields_shouldReturnFieldDTOs() { From df015e7f31571152d1b72ead201905c1189980c5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 2 Sep 2026 12:57:20 +0000 Subject: [PATCH 3/3] Release v0.0.46 [skip ci] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 139e566..110a658 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = 'com.flexcodelabs' -version = '0.0.45' +version = '0.0.46' description = 'Flextuma App' java {