mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
72 lines
1.9 KiB
SQL
72 lines
1.9 KiB
SQL
/*
|
|
# Create support requests table with employee relationship
|
|
|
|
1. Changes
|
|
- Create support_requests table with proper foreign keys
|
|
- Add RLS policies for access control
|
|
- Handle existing enum types safely
|
|
|
|
2. Security
|
|
- Enable RLS on support_requests table
|
|
- Add policies for authenticated users and admins
|
|
*/
|
|
|
|
-- Safely create enum types if they don't exist
|
|
DO $$ BEGIN
|
|
CREATE TYPE request_type AS ENUM ('hardware', 'software', 'network', 'access', 'other');
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN NULL;
|
|
END $$;
|
|
|
|
DO $$ BEGIN
|
|
CREATE TYPE request_priority AS ENUM ('low', 'medium', 'high', 'critical');
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN NULL;
|
|
END $$;
|
|
|
|
DO $$ BEGIN
|
|
CREATE TYPE request_status AS ENUM ('new', 'in_progress', 'resolved', 'closed');
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN NULL;
|
|
END $$;
|
|
|
|
-- Create support requests table with proper foreign key
|
|
CREATE TABLE IF NOT EXISTS support_requests (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
employee_id uuid REFERENCES employees(id) ON DELETE CASCADE NOT NULL,
|
|
department text NOT NULL,
|
|
request_type request_type NOT NULL,
|
|
priority request_priority NOT NULL,
|
|
status request_status NOT NULL DEFAULT 'new',
|
|
description text NOT NULL DEFAULT '',
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
last_status_change timestamptz DEFAULT now()
|
|
);
|
|
|
|
-- Enable RLS
|
|
ALTER TABLE support_requests ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Create policies
|
|
CREATE POLICY "Users can view their own requests"
|
|
ON support_requests
|
|
FOR SELECT
|
|
TO authenticated
|
|
USING (employee_id = auth.uid());
|
|
|
|
CREATE POLICY "Users can create their own requests"
|
|
ON support_requests
|
|
FOR INSERT
|
|
TO authenticated
|
|
WITH CHECK (employee_id = auth.uid());
|
|
|
|
CREATE POLICY "Admins can view all requests"
|
|
ON support_requests
|
|
FOR ALL
|
|
TO authenticated
|
|
USING (
|
|
EXISTS (
|
|
SELECT 1 FROM employees e
|
|
WHERE e.id = auth.uid()
|
|
AND e.is_admin = true
|
|
)
|
|
); |