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:
|
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-08 15:31:37 +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
|
|
|
|
2026-06-09 13:17:31 +01:00
|
|
|
from src.schemas import (
|
|
|
|
|
CustomBaseModel,
|
2026-06-10 09:32:02 +01:00
|
|
|
ResourceName,
|
2026-06-09 13:17:31 +01:00
|
|
|
ServiceIDMixin,
|
|
|
|
|
OrgIDMixin,
|
|
|
|
|
UserIDMixin,
|
|
|
|
|
PermIDMixin,
|
|
|
|
|
GroupIDMixin,
|
|
|
|
|
)
|
2026-05-27 14:58:10 +01:00
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-05-28 13:37:32 +01:00
|
|
|
class UserSchema(CustomBaseModel):
|
2026-06-02 14:37:07 +01:00
|
|
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
2026-06-02 15:13:00 +01:00
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
id: int
|
|
|
|
|
first_name: str
|
|
|
|
|
last_name: str
|
|
|
|
|
email: EmailStr
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
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")
|
|
|
|
|
|
2026-06-09 14:04:21 +01:00
|
|
|
id: int
|
2026-05-26 16:25:14 +01:00
|
|
|
service_name: str
|
|
|
|
|
resource: str
|
|
|
|
|
action: str
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-28 13:37:32 +01:00
|
|
|
class GroupSchema(CustomBaseModel):
|
2026-05-26 16:25:14 +01:00
|
|
|
id: int
|
|
|
|
|
name: str
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-06-10 09:32:02 +01:00
|
|
|
class IAMCAoRRequest(CustomBaseModel):
|
|
|
|
|
action: str
|
|
|
|
|
rn: ResourceName
|
|
|
|
|
|
|
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
class IAMGetGroupPermissionsResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +01:00
|
|
|
permissions: list[PermissionSchema]
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
class IAMGetGroupUsersResponse(CustomBaseModel):
|
2026-06-08 15:31:37 +01:00
|
|
|
users: list[UserSchema]
|
|
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-05-27 12:21:03 +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-06-08 15:31:37 +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-08 15:31:37 +01:00
|
|
|
|
2026-06-02 13:50:13 +01:00
|
|
|
class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin, OrgIDMixin):
|
2026-05-27 11:11:19 +01:00
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
class IAMPutGroupPermissionResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +01:00
|
|
|
group: GroupSchema
|
|
|
|
|
permissions: list[PermissionSchema]
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-06-02 14:21:05 +01:00
|
|
|
class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin, OrgIDMixin):
|
2026-05-27 14:58:10 +01:00
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-06-08 15:31:37 +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-06-08 15:31:37 +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-06-08 15:31:37 +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-06-08 15:31:37 +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
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-06-02 15:36:05 +01:00
|
|
|
class IAMPostPermissionRequest(ServiceIDMixin):
|
2026-05-26 16:25:14 +01:00
|
|
|
resource: str
|
|
|
|
|
action: str
|
|
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
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
|
|
|
|
2026-06-08 15:31:37 +01:00
|
|
|
|
2026-06-02 15:13:00 +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-06-08 15:31:37 +01:00
|
|
|
|
2026-05-26 16:25:14 +01:00
|
|
|
class IAMGetPermissionsSearchResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +01:00
|
|
|
permissions: list[PermissionSchema]
|
2026-06-09 16:52:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class IAMPutGroupInvitationRequest(OrgIDMixin, GroupIDMixin):
|
|
|
|
|
user_email: EmailStr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IAMPutGroupInvitationAcceptRequest(CustomBaseModel):
|
|
|
|
|
jwt: str
|