Files
AuthServer/src/main/java/ru/copperside/repository/PermissionsRepositoryJdbc.java
2025-11-26 23:08:20 +03:00

71 lines
2.9 KiB
Java

package ru.copperside.repository;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import ru.copperside.model.dto.RolePermissionDto;
import ru.copperside.sql.SqlRegistry;
import ru.copperside.util.PermissionsCompiler;
import ru.copperside.model.permission.Permission;
import java.util.List;
import static ru.copperside.util.RepoMappingHelper.*;
@Repository
@RequiredArgsConstructor
public class PermissionsRepositoryJdbc implements PermissionsRepository{
private final NamedParameterJdbcTemplate namedParameterJdbcTemplate;
private final SqlRegistry sqlRegistry;
private final ObjectMapper objectMapper;
@Override
public List<RolePermissionDto> findRoleByHierarchyId(Long hierarchyId) {
var p = new MapSqlParameterSource().addValue("hierarchyId", hierarchyId);
return namedParameterJdbcTemplate.query(sqlRegistry.get("auth/find_inherited_role_permissions_by_hierarchyid"), p, (rs, rn) -> {
return new RolePermissionDto(
rs.getLong("HIERARCHYID"),
rs.getInt("LEVEL"),
rs.getLong("ROLEID"),
rs.getLong("PERMISSIONID"),
rs.getString("PERMISSION_STRID"),
readLargeText(rs, "SETTINGS"),
getNullableBoolean(rs, "ACTION"),
readLargeText(rs, "PDATA"),
rs.getString("COMMAND"),
rs.getString("HTTP")
);
});
}
@Override
public List<RolePermissionDto> findPersonalByHierarchyId(Long hierarchyId) {
var p = new MapSqlParameterSource().addValue("hierarchyId", hierarchyId);
return namedParameterJdbcTemplate.query(sqlRegistry.get("auth/find_inherited_permissions_by_hierarchyid"), p, (rs, rn) ->
new RolePermissionDto(
getNullableLong(rs, "HIERARCHYID"),
rs.getInt("LEVEL"),
getNullableLong(rs, "ROLEID"), // здесь всегда null из SQL
rs.getLong("PERMISSIONID"),
rs.getString("PERMISSION_STRID"),
readLargeText(rs, "SETTINGS"),
getNullableBoolean(rs, "ACTION"),
readLargeText(rs, "PDATA"),
rs.getString("COMMAND"),
rs.getString("HTTP")
)
);
}
@Override
public List<Permission> findCompiledByHierarchyId(Long hierarchyId) {
var rolePerms = findRoleByHierarchyId(hierarchyId);
var personalPerms = findPersonalByHierarchyId(hierarchyId);
return new PermissionsCompiler(objectMapper).compile(rolePerms, personalPerms);
}
}