bmc_hub/migrations/026_ticket_permissions.sql
Christian 3806c7d011 feat(ticket-module): Implement ticket system with comprehensive database schema, permissions, and testing suite
- Added migration 025 for the Ticket System, creating tables for tickets, comments, attachments, worklogs, prepaid cards, and audit logs.
- Introduced migration 026 to add ticket-related permissions to the auth system and assign them to user groups.
- Developed a test suite for the Ticket Module, validating database schema, ticket number generation, prepaid card constraints, service logic, worklog creation, audit logging, and views.
2025-12-15 23:40:23 +01:00

60 lines
2.1 KiB
SQL

-- Migration 026: Add Ticket System Permissions
-- Description: Adds ticket-related permissions to auth system
-- Date: 2025-12-15
-- Add ticket permissions
INSERT INTO permissions (code, description, category) VALUES
('tickets.view', 'View tickets', 'tickets'),
('tickets.create', 'Create tickets', 'tickets'),
('tickets.edit', 'Edit tickets', 'tickets'),
('tickets.delete', 'Delete tickets', 'tickets'),
('tickets.assign', 'Assign tickets to users', 'tickets'),
('tickets.worklog.create', 'Create worklog entries', 'tickets'),
('tickets.worklog.approve', 'Approve worklog for billing', 'tickets'),
('tickets.billing.export', 'Export billable worklog to e-conomic', 'tickets'),
('tickets.prepaid.manage', 'Manage prepaid cards (klippekort)', 'tickets')
ON CONFLICT (code) DO NOTHING;
-- Assign ticket permissions to Administrators group (all permissions)
INSERT INTO group_permissions (group_id, permission_id)
SELECT g.id, p.id
FROM groups g
CROSS JOIN permissions p
WHERE g.name = 'Administrators' AND p.category = 'tickets'
ON CONFLICT DO NOTHING;
-- Assign ticket permissions to Managers group
INSERT INTO group_permissions (group_id, permission_id)
SELECT g.id, p.id
FROM groups g
CROSS JOIN permissions p
WHERE g.name = 'Managers' AND p.code IN (
'tickets.view', 'tickets.create', 'tickets.edit', 'tickets.assign',
'tickets.worklog.approve', 'tickets.billing.export', 'tickets.prepaid.manage'
)
ON CONFLICT DO NOTHING;
-- Assign ticket permissions to Technicians group
INSERT INTO group_permissions (group_id, permission_id)
SELECT g.id, p.id
FROM groups g
CROSS JOIN permissions p
WHERE g.name = 'Technicians' AND p.code IN (
'tickets.view', 'tickets.create', 'tickets.edit', 'tickets.worklog.create'
)
ON CONFLICT DO NOTHING;
-- Assign ticket view permission to Viewers group
INSERT INTO group_permissions (group_id, permission_id)
SELECT g.id, p.id
FROM groups g
CROSS JOIN permissions p
WHERE g.name = 'Viewers' AND p.code = 'tickets.view'
ON CONFLICT DO NOTHING;
-- Verify migration
SELECT 'Ticket permissions added successfully' AS status,
COUNT(*) AS ticket_permissions_count
FROM permissions
WHERE category = 'tickets';