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
|
|
|
- Mixins: "<Attribute>Mixin"
|
|
|
|
|
- Models: "<Module><Method><Resource><Opt:Resource><Direction>" ie "IAMGetGroupPermissionsResponse"
|
2026-05-26 16:25:14 +01:00
|
|
|
"""
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
2026-06-02 13:37:42 +01:00
|
|
|
from pydantic import EmailStr, ConfigDict, Field
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-06-02 15:36:05 +01:00
|
|
|
from src.service.schemas import ServiceIDMixin
|
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
|
|
|
|
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-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")
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2026-05-27 11:11:19 +01:00
|
|
|
class GroupIDMixin(CustomBaseModel):
|
2026-06-02 14:18:04 +01:00
|
|
|
group_id: int = Field(gt=0)
|
2026-05-27 11:11:19 +01:00
|
|
|
|
|
|
|
|
class PermIDMixin(CustomBaseModel):
|
2026-06-02 14:18:04 +01:00
|
|
|
permission_id: int = Field(gt=0)
|
2026-05-27 11:11:19 +01:00
|
|
|
|
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
|
|
|
|
|
|
|
|
class IAMGetGroupUsersResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +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
|
|
|
|
|
|
|
|
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):
|
2026-05-27 11:11:19 +01:00
|
|
|
pass
|
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-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
|
|
|
|
|
|
|
|
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-27 11:11:19 +01:00
|
|
|
class IAMDeleteGroupPermissionRequest(GroupIDMixin, PermIDMixin):
|
|
|
|
|
pass
|
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-27 14:58:10 +01:00
|
|
|
class IAMDeleteGroupUserRequest(GroupIDMixin, UserIDMixin):
|
|
|
|
|
pass
|
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
|
|
|
|
|
|
|
|
class IAMGetPermissionsResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +01:00
|
|
|
permissions: list[PermissionSchema]
|
2026-05-26 16:25:14 +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
|
|
|
|
|
|
|
|
|
|
class IAMPostPermissionResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +01:00
|
|
|
permission: PermissionSchema
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-05-27 11:11:19 +01:00
|
|
|
class IAMDeletePermissionRequest(PermIDMixin):
|
|
|
|
|
pass
|
2026-05-26 16:25:14 +01:00
|
|
|
|
2026-06-02 15:13:00 +01:00
|
|
|
class IAMGetPermissionsSearchRequest(OrgIDMixin):
|
|
|
|
|
service_id: Optional[int] = Field(gt=0)
|
2026-05-26 16:25:14 +01:00
|
|
|
resource: Optional[str] = None
|
|
|
|
|
action: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
class IAMGetPermissionsSearchResponse(CustomBaseModel):
|
2026-05-28 13:37:32 +01:00
|
|
|
permissions: list[PermissionSchema]
|