diff --git a/backend/app/schemas/admin.py b/backend/app/schemas/admin.py index 438ae387..fdf5eb6a 100644 --- a/backend/app/schemas/admin.py +++ b/backend/app/schemas/admin.py @@ -319,7 +319,7 @@ class AdminUserCreate(BaseModel): name: str = Field(..., min_length=1, max_length=255) account_mode: Literal["existing", "personal"] account_display_code: Optional[str] = Field(None, description="Required when account_mode='existing'") - account_role: Optional[Literal["engineer", "viewer"]] = Field(None, description="Required when account_mode='existing'") + account_role: Optional[Literal["owner", "admin", "engineer", "viewer"]] = Field(None, description="Required when account_mode='existing'") send_email: bool = True diff --git a/backend/app/schemas/user.py b/backend/app/schemas/user.py index a48df65b..ea554b0a 100644 --- a/backend/app/schemas/user.py +++ b/backend/app/schemas/user.py @@ -68,4 +68,4 @@ class RoleUpdate(BaseModel): class AccountRoleUpdate(BaseModel): - account_role: str = Field(..., pattern="^(engineer|viewer)$") + account_role: str = Field(..., pattern="^(owner|admin|engineer|viewer)$") diff --git a/frontend/src/pages/admin/AccountDetailPage.tsx b/frontend/src/pages/admin/AccountDetailPage.tsx index fef6297e..cf0c2927 100644 --- a/frontend/src/pages/admin/AccountDetailPage.tsx +++ b/frontend/src/pages/admin/AccountDetailPage.tsx @@ -44,7 +44,7 @@ export function AccountDetailPage() { const [createForm, setCreateForm] = useState({ email: '', name: '', - account_role: 'engineer' as 'engineer' | 'viewer', + account_role: 'engineer' as 'owner' | 'admin' | 'engineer' | 'viewer', send_email: true, }) const [createLoading, setCreateLoading] = useState(false) @@ -117,7 +117,7 @@ export function AccountDetailPage() { send_email: createForm.send_email, }) setShowCreateUserModal(false) - setCreateForm({ email: '', name: '', account_role: 'engineer', send_email: true }) + setCreateForm({ email: '', name: '', account_role: 'engineer' as 'owner' | 'admin' | 'engineer' | 'viewer', send_email: true }) setTempPassword(result.temporary_password) setCopiedPassword(false) toast.success(result.email_sent ? 'User created and welcome email sent' : 'User created') @@ -365,6 +365,8 @@ export function AccountDetailPage() { 'focus:outline-hidden focus:border-primary focus:ring-2 focus:ring-primary/20' )} > + + @@ -543,12 +545,14 @@ export function AccountDetailPage() { diff --git a/frontend/src/pages/admin/AccountsPage.tsx b/frontend/src/pages/admin/AccountsPage.tsx index 4baf6fbe..87acb69e 100644 --- a/frontend/src/pages/admin/AccountsPage.tsx +++ b/frontend/src/pages/admin/AccountsPage.tsx @@ -74,7 +74,7 @@ export function UsersPage() { name: '', account_mode: 'personal' as 'existing' | 'personal', account_display_code: '', - account_role: 'engineer' as 'engineer' | 'viewer', + account_role: 'engineer' as 'owner' | 'admin' | 'engineer' | 'viewer', send_email: true, }) const [createLoading, setCreateLoading] = useState(false) @@ -700,12 +700,14 @@ export function UsersPage() { diff --git a/frontend/src/types/admin.ts b/frontend/src/types/admin.ts index 0110d0a4..d8de4f96 100644 --- a/frontend/src/types/admin.ts +++ b/frontend/src/types/admin.ts @@ -266,7 +266,7 @@ export interface AdminUserCreate { name: string account_mode: 'existing' | 'personal' account_display_code?: string - account_role?: 'engineer' | 'viewer' + account_role?: 'owner' | 'admin' | 'engineer' | 'viewer' send_email: boolean }