Consolidate data access control backoffice updates
This commit is contained in:
@@ -46,19 +46,19 @@ public class PermissionService {
|
||||
private final PermissionMapper permissionMapper;
|
||||
private final ProtectedObjectService protectedObjectService;
|
||||
private final AuditService auditService;
|
||||
private final DdsAuthorizationChangeNotifier ddsAuthorizationChangeNotifier;
|
||||
private final ExternalAuthorizationChangeNotifier authorizationChangeNotifier;
|
||||
|
||||
@Autowired
|
||||
public PermissionService(
|
||||
PermissionMapper permissionMapper,
|
||||
ProtectedObjectService protectedObjectService,
|
||||
AuditService auditService,
|
||||
DdsAuthorizationChangeNotifier ddsAuthorizationChangeNotifier
|
||||
ExternalAuthorizationChangeNotifier authorizationChangeNotifier
|
||||
) {
|
||||
this.permissionMapper = permissionMapper;
|
||||
this.protectedObjectService = protectedObjectService;
|
||||
this.auditService = auditService;
|
||||
this.ddsAuthorizationChangeNotifier = ddsAuthorizationChangeNotifier;
|
||||
this.authorizationChangeNotifier = authorizationChangeNotifier;
|
||||
}
|
||||
|
||||
public PermissionService(
|
||||
@@ -66,7 +66,7 @@ public class PermissionService {
|
||||
ProtectedObjectService protectedObjectService,
|
||||
AuditService auditService
|
||||
) {
|
||||
this(permissionMapper, protectedObjectService, auditService, DdsAuthorizationChangeNotifier.noop());
|
||||
this(permissionMapper, protectedObjectService, auditService, ExternalAuthorizationChangeNotifier.noop());
|
||||
}
|
||||
|
||||
public List<AppRole> findRoles() {
|
||||
@@ -90,7 +90,7 @@ public class PermissionService {
|
||||
long roleId = permissionMapper.nextRoleId();
|
||||
permissionMapper.insertRole(roleId, roleName.trim(), description, normalizeSensitivityLevel(maxSensitivityLevel));
|
||||
auditService.record(new AuditEvent("ROLE_CREATED", null, null, "SUCCESS", null, null, roleName));
|
||||
ddsAuthorizationChangeNotifier.changed("ROLE_CREATED");
|
||||
authorizationChangeNotifier.changed("ROLE_CREATED");
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@@ -102,7 +102,7 @@ public class PermissionService {
|
||||
}
|
||||
auditService.record(new AuditEvent("ROLE_MAX_SENSITIVITY_UPDATED", null, null, "SUCCESS", null, null,
|
||||
"roleId=" + roleId + ", max=" + normalized));
|
||||
ddsAuthorizationChangeNotifier.changed("ROLE_MAX_SENSITIVITY_UPDATED");
|
||||
authorizationChangeNotifier.changed("ROLE_MAX_SENSITIVITY_UPDATED");
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@@ -128,7 +128,7 @@ public class PermissionService {
|
||||
throw new AppException("삭제할 역할을 찾을 수 없습니다.");
|
||||
}
|
||||
auditService.record(new AuditEvent("ROLE_DELETED", null, null, "SUCCESS", null, null, "roleId=" + roleId));
|
||||
ddsAuthorizationChangeNotifier.changed("ROLE_DELETED");
|
||||
authorizationChangeNotifier.changed("ROLE_DELETED");
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@@ -143,7 +143,6 @@ public class PermissionService {
|
||||
}
|
||||
protectedObjectService.assertEnabled(command.objectId());
|
||||
validateRules(command.objectId(), command.rules());
|
||||
validateVisibleColumns(command.objectId(), command.visibleColumns());
|
||||
|
||||
Long existingId = permissionMapper.findPermissionId(command.roleId(), command.objectId());
|
||||
long permissionId = existingId == null ? permissionMapper.nextPermissionId() : existingId;
|
||||
@@ -167,17 +166,12 @@ public class PermissionService {
|
||||
}
|
||||
|
||||
permissionMapper.deleteVisibleColumns(permissionId);
|
||||
if (command.visibleColumns() != null) {
|
||||
for (String columnName : command.visibleColumns()) {
|
||||
permissionMapper.insertVisibleColumn(permissionId, columnName.trim().toUpperCase(Locale.ROOT));
|
||||
}
|
||||
}
|
||||
|
||||
auditService.record(new AuditEvent(
|
||||
"PERMISSION_SAVED", null, command.objectId(), "SUCCESS", null, null,
|
||||
"roleId=" + command.roleId()
|
||||
));
|
||||
ddsAuthorizationChangeNotifier.changed("PERMISSION_SAVED");
|
||||
authorizationChangeNotifier.changed("PERMISSION_SAVED");
|
||||
return new PermissionSet(permissionId, command.roleId(), command.objectId(), "SELECT", permissionEffect, List.of(), List.of());
|
||||
}
|
||||
|
||||
@@ -203,7 +197,7 @@ public class PermissionService {
|
||||
}
|
||||
auditService.record(new AuditEvent("PERMISSION_DELETED", null, null, "SUCCESS", null, null,
|
||||
"permissionId=" + permissionId));
|
||||
ddsAuthorizationChangeNotifier.changed("PERMISSION_DELETED");
|
||||
authorizationChangeNotifier.changed("PERMISSION_DELETED");
|
||||
}
|
||||
|
||||
public int countPermissionsByObjectId(long objectId) {
|
||||
@@ -305,21 +299,6 @@ public class PermissionService {
|
||||
}
|
||||
}
|
||||
|
||||
private void validateVisibleColumns(long objectId, List<String> visibleColumns) {
|
||||
if (visibleColumns == null || visibleColumns.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Set<String> allowed = new HashSet<>();
|
||||
for (ProtectedColumn column : protectedObjectService.findColumns(objectId)) {
|
||||
allowed.add(column.columnName().toUpperCase(Locale.ROOT));
|
||||
}
|
||||
for (String columnName : visibleColumns) {
|
||||
if (!allowed.contains(columnName.trim().toUpperCase(Locale.ROOT))) {
|
||||
throw new AppException("등록되지 않은 컬럼입니다: " + columnName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String normalize(String value) {
|
||||
return clean(value).toUpperCase(Locale.ROOT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user