Add Groups resource type and scopes to authorization schema#6
Add Groups resource type and scopes to authorization schema#6ShashankFC wants to merge 1 commit into
Conversation
…ation implementation Closes #35562 Signed-off-by: vramik <vramik@redhat.com>
1 similar comment
|
Claude finished @ShashankFC's task in 2m 19s —— View job Code Review CompleteTasks
SummaryThis PR adds support for Groups as a first-class resource type in the Fine-Grained Authorization Permissions (FGAP) V2 system. The implementation follows the existing pattern established for Users and Clients resources, adding granular permission scopes for group management. Key Changes
Issues Found🔴 Critical Issues1. Logic Error in GroupPermissionsV2.canManage() Location: @Override
public boolean canManage() {
if (root.hasOneAdminRole(AdminRoles.MANAGE_USERS)) {
return true;
}
return hasPermission(null, AdminPermissionsSchema.VIEW, AdminPermissionsSchema.MANAGE);
}Issue: The method checks for Impact: Users with only VIEW permission on "all-groups" would be incorrectly granted management rights. Fix: Remove return hasPermission(null, AdminPermissionsSchema.MANAGE);🟡 Medium Issues2. Inconsistent Resource ID Usage in GroupPermissionsV2 Location: resourceStore.findByType(server, AdminPermissionsSchema.GROUPS_RESOURCE_TYPE, groupResource -> {
if (hasPermission(groupResource.getId(), AdminPermissionsSchema.VIEW_MEMBERS, AdminPermissionsSchema.MANAGE_MEMBERS)) {
granted.add(groupResource.getId());
}
});Issue: The method passes Impact: The Fix: The method should use granted.add(groupResource.getName());3. Potential NPE in GroupPermissionsV2.hasPermission() Location: // check if there is a permission for "all-groups". If so, proceed with the evaluation to check scopes
if (policyStore.findByResource(server, resource).isEmpty()) {
return false;
}Issue: If Impact: Crashes when authorization schema is misconfigured or resource type resource doesn't exist. Fix: Add null check: if (resource == null || policyStore.findByResource(server, resource).isEmpty()) {
return false;
}4. Missing Documentation Consistency Location: The class extends
Recommendation: Add comprehensive class-level JavaDoc. 🟢 Minor Issues / Suggestions5. Code Duplication in Permission Checking Pattern repeated across: The 6. Test Code Quality Location: private final GroupRepresentation topGroup = new GroupRepresentation();;Double semicolon - minor style issue. 7. Deprecated Method in Interface Location: @Deprecated
boolean isImpersonatable(UserModel user, ClientModel requester);The method is deprecated but still in the interface. Consider documenting the migration path in the deprecation annotation: @Deprecated(since = "FGAP-V2", forRemoval = true)8. Magic String in resolveGroup Location: private String resolveGroup(KeycloakSession session, String id) {
RealmModel realm = session.getContext().getRealm();
GroupModel group = session.groups().getGroupById(realm, id);
return group == null ? null : group.getId();
}Issue: This method just returns the same Suggestion: Either:
Security Analysis✅ No security vulnerabilities detected The implementation correctly:
Architectural ObservationsPositive:
Concerns:
Test CoverageWell covered:
Could be improved:
Recommendations
Action Items
|
Test 6nn---nReplicated from ai-code-review-evaluation/keycloak-greptile#6