Skip to content

Commit 158c19b

Browse files
authored
Merge pull request #98 from DeathGun44/MX-222
MX-222: Fix Self-Service API caches stale RBAC permissions after role updates
2 parents d55e5ef + f364947 commit 158c19b

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

src/main/java/org/apache/fineract/selfservice/security/service/TenantAwareJpaPlatformSelfServiceUserDetailsService.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.apache.fineract.selfservice.security.domain.PlatformSelfServiceUser;
2222
import org.apache.fineract.selfservice.security.domain.PlatformSelfServiceUserRepository;
2323
import org.springframework.beans.factory.annotation.Autowired;
24-
import org.springframework.cache.annotation.Cacheable;
2524
import org.springframework.dao.DataAccessException;
2625
import org.springframework.security.core.userdetails.UserDetails;
2726
import org.springframework.security.core.userdetails.UserDetailsService;
@@ -38,7 +37,6 @@ public class TenantAwareJpaPlatformSelfServiceUserDetailsService implements Plat
3837
private PlatformSelfServiceUserRepository platformUserRepository;
3938

4039
@Override
41-
@Cacheable(value = "selfServiceUsersByUsername", key = "T(org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil).getTenant().getTenantIdentifier().concat(#username+'ubu')")
4240
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException, DataAccessException {
4341

4442
// Retrieve active users only

src/test/java/org/apache/fineract/selfservice/security/api/SelfServicePermissionEnforcementIntegrationTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,5 +137,22 @@ void testSavingsProductsRequireReadSavingsProductPermission() throws Exception {
137137
.get(SelfServiceTestUtils.CONTEXT_PATH + "/api/v1/self/savingsproducts")
138138
.then()
139139
.statusCode(200);
140+
141+
// 7. Revoke READ_SAVINGSPRODUCT to verify the cache does not retain it
142+
permissions.put("READ_SAVINGSPRODUCT", false);
143+
permissionBody.put("permissions", permissions);
144+
145+
given(SelfServiceTestUtils.requestSpecWithAuth(getFineractPort(), "mifos", "password"))
146+
.body(permissionBody)
147+
.put(SelfServiceTestUtils.CONTEXT_PATH + "/api/v1/roles/" + roleId + "/permissions")
148+
.then()
149+
.statusCode(200);
150+
151+
// 8. Test the API without the permission: Expect 403 immediately
152+
given(SelfServiceTestUtils.requestSpecWithAuth(getFineractPort(), "tomas", "password"))
153+
.when()
154+
.get(SelfServiceTestUtils.CONTEXT_PATH + "/api/v1/self/savingsproducts")
155+
.then()
156+
.statusCode(403);
140157
}
141158
}

0 commit comments

Comments
 (0)