1
0
Fork 0
forked from sr2/cloud-api
cloud-api/src/iam/schemas.py

133 lines
2.6 KiB
Python
Raw Normal View History

"""
2026-05-26 16:25:14 +01:00
Pydantic models for the IAM module
2026-05-28 13:22:24 +01:00
Models follow the nomenclature of:
2026-05-28 13:37:32 +01:00
- Sub-models: "<Resource><Opt:>Schema"
2026-05-28 13:22:24 +01:00
- Models: "<Module><Method><Resource><Opt:Resource><Direction>" ie "IAMGetGroupPermissionsResponse"
2026-05-26 16:25:14 +01:00
"""
2026-06-02 15:55:50 +01:00
from typing import Optional, Annotated
2026-05-26 16:25:14 +01:00
2026-06-02 13:37:42 +01:00
from pydantic import EmailStr, ConfigDict, Field
2026-05-26 16:25:14 +01:00
from src.schemas import (
CustomBaseModel,
ResourceName,
ServiceIDMixin,
OrgIDMixin,
UserIDMixin,
PermIDMixin,
GroupIDMixin,
GroupSummary,
OrgSummary,
UserSummary,
)
2026-05-26 16:25:14 +01:00
2026-05-28 13:37:32 +01:00
class UserSchema(CustomBaseModel):
model_config = ConfigDict(from_attributes=True, extra="ignore")
2026-05-26 16:25:14 +01:00
id: int
first_name: str
last_name: str
email: EmailStr
2026-05-28 13:37:32 +01:00
class PermissionSchema(CustomBaseModel):
2026-05-26 16:25:14 +01:00
model_config = ConfigDict(from_attributes=True, extra="ignore")
id: int
2026-05-26 16:25:14 +01:00
service_name: str
resource: str
action: str
2026-05-28 13:37:32 +01:00
class GroupSchema(CustomBaseModel):
2026-05-26 16:25:14 +01:00
id: int
name: str
class IAMCAoRRequest(CustomBaseModel):
action: str
rn: ResourceName
2026-05-26 16:25:14 +01:00
class IAMGetGroupPermissionsResponse(CustomBaseModel):
organisation: OrgSummary
group: GroupSummary
2026-05-28 13:37:32 +01:00
permissions: list[PermissionSchema]
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMGetGroupUsersResponse(CustomBaseModel):
organisation: OrgSummary
group: GroupSummary
users: list[UserSummary]
2026-05-26 16:25:14 +01:00
class IAMPostGroupRequest(OrgIDMixin):
2026-06-02 13:37:42 +01:00
name: str = Field(min_length=3)
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMPostGroupResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
group: GroupSchema
2026-05-26 16:25:14 +01:00
2026-06-02 13:50:13 +01:00
class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin, OrgIDMixin):
pass
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMPutGroupPermissionResponse(CustomBaseModel):
organisation: OrgSummary
group: GroupSummary
2026-05-28 13:37:32 +01:00
permissions: list[PermissionSchema]
2026-05-26 16:25:14 +01:00
2026-06-02 14:21:05 +01:00
class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin, OrgIDMixin):
pass
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMPutGroupUserResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
group: GroupSchema
users: list[UserSchema]
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMDeleteGroupPermissionResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
group: GroupSchema
permissions: list[PermissionSchema]
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMDeleteGroupUserResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
group: GroupSchema
users: list[UserSchema]
2026-05-26 16:25:14 +01:00
2026-05-26 16:25:14 +01:00
class IAMGetPermissionsResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
permissions: list[PermissionSchema]
2026-05-26 16:25:14 +01:00
class IAMPostPermissionRequest(ServiceIDMixin):
2026-05-26 16:25:14 +01:00
resource: str
action: str
2026-05-26 16:25:14 +01:00
class IAMPostPermissionResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
permission: PermissionSchema
2026-05-26 16:25:14 +01:00
class IAMGetPermissionsSearchRequest(OrgIDMixin):
2026-06-02 15:55:50 +01:00
service_id: Annotated[int | None, Field(gt=0)] = None
2026-05-26 16:25:14 +01:00
resource: Optional[str] = None
action: Optional[str] = None
2026-05-26 16:25:14 +01:00
class IAMGetPermissionsSearchResponse(CustomBaseModel):
2026-05-28 13:37:32 +01:00
permissions: list[PermissionSchema]
class IAMPutGroupInvitationRequest(OrgIDMixin, GroupIDMixin):
user_email: EmailStr
class IAMPutGroupInvitationAcceptRequest(CustomBaseModel):
jwt: str