lablup / lablup/backend.ai

Implement RBAC API adapters

Open
#7,308 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
670
Forks
183
Avg merge
17h 7m
Merged PRs (30d)
358

Description

## Overview

Implement data conversion adapters for the RBAC management REST API. Adapters transform between service layer data structures and API DTOs, handling complex query building and filtering logic.

## Scope

### 1. Role Adapter

Location: `src/ai/backend/manager/api/rbac/role_adapter.py`

**Methods:**

- `convert_to_dto(data: RoleData | RoleDetailData) -> RoleDTO`
- Converts repository layer role data to API DTO
- Handles both simple and detailed role data structures
- `build_querier(request: SearchRolesRequest) -> BatchQuerier`
- Converts search request to repository querier
- Applies filters, sorting, and pagination
- `_convert_filter(filter: RoleFilter) -> list[QueryCondition]`
- Transforms API filter to repository query conditions
- Handles name patterns, source, status filtering
- `_convert_order(order: RoleOrder) -> QueryOrder`
- Maps API sort fields to repository ordering
- Supports multiple sort fields
- `_build_pagination(limit: int, offset: int) -> OffsetPagination`
- Creates pagination object for queries

### 2. Assigned User Adapter

Location: `src/ai/backend/manager/api/rbac/assigned_user_adapter.py`

**Methods:**

- `convert_to_dto(data: AssignedUserData) -> AssignedUserDTO`
- Converts assigned user data to API DTO
- `build_querier(request: SearchUsersAssignedToRoleRequest) -> BatchQuerier`
- Converts user search request to querier
- Applies user-specific filters and sorting
- `_convert_filter(filter: AssignedUserFilter) -> list[QueryCondition]`
- Transforms user filter conditions
- `_convert_order(order: AssignedUserOrder) -> QueryOrder`
- Maps user sort fields

## Technical Requirements

### Input Types (from BA-3377)

- Request DTOs: `SearchRolesRequest`, `SearchUsersAssignedToRoleRequest`, etc.
- Response DTOs: `RoleDTO`, `AssignedUserDTO`

### Output Types (to Repository Layer)

- `BatchQuerier`: Repository query builder
- `QueryCondition`: Filter conditions
- `QueryOrder`: Sorting specifications
- `OffsetPagination`: Pagination metadata

### Conversion Logic

- Handle null/optional fields gracefully
- Validate enum conversions (RoleSource, RoleStatus)
- Convert string patterns to SQL LIKE expressions
- Map API field names to database column names

## Architecture

```
Request DTO (API Layer)

Adapter.build_querier()

BatchQuerier (Repository Layer)

Database Query

Database Result

Adapter.convert_to_dto()

Response DTO (API Layer)
```

## Dependencies

### Requires (BA-3377)

- All Request/Response DTOs
- Filter and Order classes

### Provides To (BA-3379)

- Data conversion utilities for handlers
- Query building logic

### Internal Dependencies

- `ai.backend.manager.data.permission.role` for data structures
- `ai.backend.manager.repositories` for querier types

## Acceptance Criteria

- RoleAdapter with all 5 methods implemented
- AssignedUserAdapter with all 4 methods implemented
- Filter conversion handles all field types correctly
- Order conversion supports multiple sort fields
- Pagination correctly applies limit/offset
- Type checks pass (`pants check`)
- All adapter classes properly exported

## Estimated Effort

**Story Points**: 3
**Lines of Code**: ~200 lines

## Related Issues

- GitHub: #7315 (tentative, may change)
- Parent Branch: feat/rearrange-rbac-data-type
- Depends On: BA-3377 (DTOs must exist first)
- Blocks: BA-3379 (Handlers use adapters)

JIRA Issue: BA-3378

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.