2026-05-25 09:05:17 +01:00
|
|
|
"""
|
2026-05-26 16:25:14 +01:00
|
|
|
Pydantic models for the IAM module
|
2026-05-25 09:05:17 +01:00
|
|
|
|
2026-05-28 13:22:24 +01:00
|
|
|
Models follow the nomenclature of:
|
|
|
|
|
- Sub-models: "<Resource>Response"
|
|
|
|
|
- Mixins: "<Attribute>Mixin"
|
|
|
|
|
- Models: "<Module><Method><Resource><Opt:Resource><Direction>" ie "IAMGetGroupPermissionsResponse"
|
2026-05-26 16:25:14 +01:00
|
|
|
"""
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
|
|
|
|
from pydantic import EmailStr, ConfigDict
|
|
|
|
|
|
2026-05-27 12:21:03 +01:00
|
|
|
from src.organisation.schemas import OrgIDMixin
|
2026-05-26 16:25:14 +01:00
|
|
|
from src.schemas import CustomBaseModel
|
2026-05-27 14:58:10 +01:00
|
|
|
from user.schemas import UserIDMixin
|
|
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
|
|
|
|
|
class UserResponse(CustomBaseModel):
|
|
|
|
|
id: int
|
|
|
|
|
first_name: str
|
|
|
|
|
last_name: str
|
|
|
|
|
email: EmailStr
|
|
|
|
|
|
|
|
|
|
class PermissionResponse(CustomBaseModel):
|
|
|
|
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
|
|
|
|
|
|
|
|
|
service_name: str
|
|
|
|
|
resource: str
|
|
|
|
|
action: str
|
|
|
|
|
|
|
|
|
|
class GroupResponse(CustomBaseModel):
|
|
|
|
|
id: int
|
|
|
|
|
name: str
|
|
|
|
|
|
2026-05-27 11:11:19 +01:00
|
|
|
class GroupIDMixin(CustomBaseModel):
|
|
|
|
|
group_id: int
|
|
|
|
|
|
|
|
|
|
class PermIDMixin(CustomBaseModel):
|
|
|
|
|
permission_id: int
|
|
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
class IAMGetGroupPermissionsResponse(CustomBaseModel):
|
|
|
|
|
permissions: list[PermissionResponse]
|
|
|
|
|
|
|
|
|
|
class IAMGetGroupUsersResponse(CustomBaseModel):
|
|
|
|
|
users : list[UserResponse]
|
|
|
|
|
|
2026-05-27 12:21:03 +01:00
|
|
|
class IAMPostGroupRequest(OrgIDMixin):
|
2026-05-26 16:25:14 +01:00
|
|
|
name: str
|
|
|
|
|
|
|
|
|
|
class IAMPostGroupResponse(CustomBaseModel):
|
|
|
|
|
group: GroupResponse
|
|
|
|
|
|
2026-05-27 11:11:19 +01:00
|
|
|
class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin):
|
|
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
|
|
|
|
class IAMPutGroupPermissionResponse(CustomBaseModel):
|
|
|
|
|
group: GroupResponse
|
|
|
|
|
permissions: list[PermissionResponse]
|
|
|
|
|
|
2026-05-27 14:58:10 +01:00
|
|
|
class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin):
|
|
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
|
|
|
|
class IAMPutGroupUserResponse(CustomBaseModel):
|
|
|
|
|
group: GroupResponse
|
|
|
|
|
users: list[UserResponse]
|
|
|
|
|
|
2026-05-27 11:11:19 +01:00
|
|
|
class IAMDeleteGroupPermissionRequest(GroupIDMixin, PermIDMixin):
|
|
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
|
|
|
|
class IAMDeleteGroupPermissionResponse(CustomBaseModel):
|
|
|
|
|
group: GroupResponse
|
|
|
|
|
permissions: list[PermissionResponse]
|
|
|
|
|
|
2026-05-27 14:58:10 +01:00
|
|
|
class IAMDeleteGroupUserRequest(GroupIDMixin, UserIDMixin):
|
|
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
|
|
|
|
class IAMDeleteGroupUserResponse(CustomBaseModel):
|
|
|
|
|
group: GroupResponse
|
|
|
|
|
users: list[UserResponse]
|
|
|
|
|
|
|
|
|
|
class IAMGetPermissionsResponse(CustomBaseModel):
|
|
|
|
|
permissions: list[PermissionResponse]
|
|
|
|
|
|
|
|
|
|
class IAMPostPermissionRequest(CustomBaseModel):
|
|
|
|
|
service_id: int
|
|
|
|
|
resource: str
|
|
|
|
|
action: str
|
|
|
|
|
|
|
|
|
|
class IAMPostPermissionResponse(CustomBaseModel):
|
|
|
|
|
permission: PermissionResponse
|
|
|
|
|
|
2026-05-27 11:11:19 +01:00
|
|
|
class IAMDeletePermissionRequest(PermIDMixin):
|
|
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
|
|
|
|
class IAMGetPermissionsSearchRequest(CustomBaseModel):
|
|
|
|
|
service_id: Optional[int] = None
|
|
|
|
|
resource: Optional[str] = None
|
|
|
|
|
action: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
class IAMGetPermissionsSearchResponse(CustomBaseModel):
|
|
|
|
|
permissions: list[PermissionResponse]
|