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
}