71 lines
2.9 KiB
Java
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);
|
|
}
|
|
}
|