Add named teams and per-user data visibility (own/team/org) with settings UI and org module.

This commit is contained in:
2026-09-26 17:15:09 +03:30
parent 499d13d1df
commit 1b160c8cd3
17 changed files with 1097 additions and 28 deletions
+34
View File
@@ -155,6 +155,7 @@ model Organization {
users User[]
memberships Membership[]
orgRoles OrgRole[]
teams Team[]
companies Company[]
people Person[]
pipelines Pipeline[]
@@ -241,6 +242,7 @@ model User {
auditLogs AuditLog[] @relation("AuditLogActor")
savedViews SavedView[] @relation("SavedViewOwner")
assignedProjectCards ProjectCard[] @relation("ProjectCardAssignees")
teamMemberships TeamMember[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -281,6 +283,8 @@ model Membership {
orgRole OrgRole? @relation(fields: [orgRoleId], references: [id], onDelete: SetNull)
isActive Boolean @default(true)
commissionPercent Decimal @default(0) @db.Decimal(8, 2)
/// own | team | org — سطح دید داده‌ها برای نقش‌های غیرمالک/مدیر
dataVisibility String @default("own")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -290,6 +294,36 @@ model Membership {
@@index([orgRoleId])
}
/// گروه کاری داخل سازمان برای دیدپذیری مشترک
model Team {
id String @id @default(cuid())
organizationId String
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
name String
description String @default("")
members TeamMember[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([organizationId, name])
@@index([organizationId])
}
model TeamMember {
id String @id @default(cuid())
teamId String
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
/// member | manager
role String @default("member")
createdAt DateTime @default(now())
@@unique([teamId, userId])
@@index([userId])
@@index([teamId])
}
/// حساب سوپرادمین پلتفرم — جدا از User سازمانی
model PlatformAdmin {
id String @id @default(cuid())