RABC fejlesztése és beélesítése hibák kijavításával
This commit is contained in:
@@ -25,17 +25,25 @@ class OrgType(str, enum.Enum):
|
||||
business = "business"
|
||||
|
||||
class OrgUserRole(str, enum.Enum):
|
||||
"""Szervezeti (Organization-level) szerepkörök.
|
||||
|
||||
Ezek a szerepkörök a szervezeten/flottán belüli jogosultságokat határozzák meg.
|
||||
Minden szerepkörhöz egyedi JSON permissions objektum tartozik a fleet.org_roles táblában.
|
||||
"""
|
||||
OWNER = "OWNER"
|
||||
ADMIN = "ADMIN"
|
||||
MANAGER = "MANAGER"
|
||||
MEMBER = "MEMBER"
|
||||
AGENT = "AGENT"
|
||||
ACCOUNTANT = "ACCOUNTANT"
|
||||
DRIVER = "DRIVER"
|
||||
VIEWER = "VIEWER"
|
||||
|
||||
class OrgRole(Base):
|
||||
"""
|
||||
Dinamikus szerepkör modell (RBAC).
|
||||
Dinamikus szerepkör modell (RBAC Phase 2).
|
||||
A szervezeti szerepkörök adatbázis-vezéreltek, nem hardkódolt Enum-ok.
|
||||
Alapértelmezett szerepkörök: OWNER, ADMIN, MANAGER, MEMBER, AGENT.
|
||||
Alapértelmezett szerepkörök: OWNER, ADMIN, ACCOUNTANT, DRIVER, VIEWER.
|
||||
|
||||
permissions: JSONB oszlop a capability-alapú jogosultságok tárolására.
|
||||
Példa: {"can_add_expense": True, "can_approve_expense": False}
|
||||
"""
|
||||
__tablename__ = "org_roles"
|
||||
__table_args__ = {"schema": "fleet"}
|
||||
@@ -48,6 +56,16 @@ class OrgRole(Base):
|
||||
priority: Mapped[int] = mapped_column(Integer, default=0)
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
# ── RBAC Phase 2: JSONB permissions column ──
|
||||
# Stores capability flags for this role, e.g.:
|
||||
# {"can_add_expense": True, "can_approve_expense": True, "can_view_financials": True}
|
||||
permissions: Mapped[dict] = mapped_column(
|
||||
JSONB,
|
||||
nullable=False,
|
||||
default=dict,
|
||||
server_default=text("'{}'::jsonb")
|
||||
)
|
||||
|
||||
class Organization(Base):
|
||||
"""
|
||||
@@ -119,9 +137,18 @@ class Organization(Base):
|
||||
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
|
||||
# ── 📦 ELŐFIZETÉS / SUBSCRIPTION ──
|
||||
subscription_plan: Mapped[str] = mapped_column(String(30), server_default=text("'FREE'"), index=True)
|
||||
base_asset_limit: Mapped[int] = mapped_column(Integer, server_default=text("1"))
|
||||
purchased_extra_slots: Mapped[int] = mapped_column(Integer, server_default=text("0"))
|
||||
|
||||
# P0 FEATURE: Subscription Tier FK — connects this org to a system.subscription_tiers record
|
||||
subscription_tier_id: Mapped[Optional[int]] = mapped_column(
|
||||
Integer,
|
||||
ForeignKey("system.subscription_tiers.id"),
|
||||
nullable=True,
|
||||
index=True
|
||||
)
|
||||
|
||||
notification_settings: Mapped[Any] = mapped_column(JSON, server_default=text("'{\"notify_owner\": true, \"alert_days_before\": [30, 15, 7, 1]}'::jsonb"))
|
||||
external_integration_config: Mapped[Any] = mapped_column(JSON, server_default=text("'{}'::jsonb"))
|
||||
@@ -215,9 +242,12 @@ class OrganizationMember(Base):
|
||||
# Meghívó lejárati ideje
|
||||
expires_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
||||
|
||||
# Dinamikus szerepkör (String, nem Enum) - az OrgRole táblából validáljuk
|
||||
# Dinamikus szerepkör - PostgreSQL ENUM típus (fleet.orguserrole)
|
||||
# A PG_ENUM használata biztosítja, hogy az SQLAlchemy megfelelő típuskényszerítést
|
||||
# (type cast) alkalmazzon a lekérdezéseknél, elkerülve az
|
||||
# "operator does not exist: fleet.orguserrole = character varying" hibát.
|
||||
role: Mapped[str] = mapped_column(
|
||||
String(50),
|
||||
PG_ENUM(OrgUserRole, name="orguserrole", schema="fleet", create_type=False),
|
||||
default="MEMBER",
|
||||
server_default=text("'MEMBER'")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user