Files
arrr-erp/alembic/versions/20260424_partner_service_restrictions.py
T
2026-06-20 15:01:44 +05:30

78 lines
2.2 KiB
Python

"""restrict partner service management permissions
Revision ID: 20260424_partner_service_restrictions
Revises: 20260423_services_phase_s2_default_templates
Create Date: 2026-04-24 20:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
revision = "20260424_partner_service_restrictions"
down_revision = "20260423_services_phase_s2_default_templates"
branch_labels = None
depends_on = None
PARTNER_REMOVE_PERMISSIONS = (
"services.create",
"services.edit",
"services.deactivate",
"services.cross_branch",
"services.import",
"services.selection.manage",
"service_tasks.create",
"service_tasks.edit",
"service_tasks.import",
"service_tasks.deactivate",
)
def upgrade():
conn = op.get_bind()
conn.execute(
sa.text(
"""
DELETE FROM role_permissions
WHERE role_id IN (SELECT id FROM roles WHERE name = :role_name)
AND permission_id IN (SELECT id FROM permissions WHERE code IN :codes)
"""
).bindparams(sa.bindparam("codes", expanding=True)),
{"role_name": "Partner", "codes": PARTNER_REMOVE_PERMISSIONS},
)
def downgrade():
conn = op.get_bind()
rows = conn.execute(
sa.text(
"""
SELECT r.id AS role_id, p.id AS permission_id
FROM roles r
JOIN permissions p ON p.code IN :codes
WHERE r.name = :role_name
"""
).bindparams(sa.bindparam("codes", expanding=True)),
{"role_name": "Partner", "codes": PARTNER_REMOVE_PERMISSIONS},
).fetchall()
for row in rows:
exists = conn.execute(
sa.text(
"""
SELECT 1 FROM role_permissions
WHERE role_id = :role_id AND permission_id = :permission_id
"""
),
{"role_id": row.role_id, "permission_id": row.permission_id},
).fetchone()
if not exists:
conn.execute(
sa.text(
"""
INSERT INTO role_permissions (role_id, permission_id)
VALUES (:role_id, :permission_id)
"""
),
{"role_id": row.role_id, "permission_id": row.permission_id},
)