import asyncio import os from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text from dotenv import load_dotenv load_dotenv() raw_url = os.getenv("DATABASE_URL") if not raw_url: raw_url = "postgresql://admin:PASSWORD_111@postgres-db:5432/service_finder" DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://").replace("/service_finder_db", "/service_finder") async def upgrade_permissions(): print(f"🔌 Kapcsolódás...") engine = create_async_engine(DATABASE_URL) async with engine.begin() as conn: print("👑 USERS tábla bővítése (Rendszer és Szervezeti szintek)...") # 1. SYS_ROLE: Rendszergazda / Moderátor / User await conn.execute(text(""" ALTER TABLE data.users ADD COLUMN IF NOT EXISTS sys_role VARCHAR(20) DEFAULT 'USER'; """)) # 2. HIERARCHIA: Ki a főnököd? (Parent User ID) # Ha NULL, akkor ő a Cégtulajdonos (SuperUser). Ha van ID, akkor Alkalmazott. await conn.execute(text(""" ALTER TABLE data.users ADD COLUMN IF NOT EXISTS parent_id INTEGER REFERENCES data.users(id); """)) # 3. ORG_ROLE: Cégen belüli szerep (Owner, Fleet Manager, Employee) await conn.execute(text(""" ALTER TABLE data.users ADD COLUMN IF NOT EXISTS org_role VARCHAR(20) DEFAULT 'OWNER'; """)) print("🚦 VEHICLE_HISTORY tábla bővítése (Sofőr jogosultságok)...") # 4. ACCESS_LEVEL: Mit láthat a sofőr? (COST_MANAGER vs LOG_ONLY) await conn.execute(text(""" ALTER TABLE data.vehicle_history ADD COLUMN IF NOT EXISTS access_level VARCHAR(20) DEFAULT 'FULL'; -- Lehetséges értékek: 'FULL', 'COST_MANAGER', 'LOG_ONLY' """)) # --- DEMO ADATOK FRISSÍTÉSE --- print("👤 Demo User (ID:1) kinevezése Rendszergazdának és Cégtulajdonosnak...") await conn.execute(text(""" UPDATE data.users SET sys_role = 'SYS_ADMIN', org_role = 'OWNER', parent_id = NULL WHERE id = 1; """)) print("✅ KÉSZ! A jogosultsági mátrix beépítve az adatbázisba.") await engine.dispose() if __name__ == "__main__": asyncio.run(upgrade_permissions())