Migrations
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
-- Pass slip system for duty excusals
|
||||
CREATE TABLE IF NOT EXISTS pass_slips (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id uuid NOT NULL REFERENCES auth.users(id),
|
||||
duty_schedule_id uuid NOT NULL REFERENCES duty_schedules(id),
|
||||
reason text NOT NULL,
|
||||
status text NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected', 'completed')),
|
||||
requested_at timestamptz NOT NULL DEFAULT now(),
|
||||
approved_by uuid REFERENCES auth.users(id),
|
||||
approved_at timestamptz,
|
||||
slip_start timestamptz,
|
||||
slip_end timestamptz
|
||||
);
|
||||
|
||||
CREATE INDEX idx_pass_slips_user ON pass_slips (user_id, requested_at DESC);
|
||||
CREATE INDEX idx_pass_slips_status ON pass_slips (status) WHERE status IN ('pending', 'approved');
|
||||
|
||||
-- Enable realtime
|
||||
ALTER PUBLICATION supabase_realtime ADD TABLE pass_slips;
|
||||
|
||||
-- RLS
|
||||
ALTER TABLE pass_slips ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Users can see their own pass slips; admin/dispatcher can see all
|
||||
CREATE POLICY "pass_slips_select" ON pass_slips FOR SELECT TO authenticated
|
||||
USING (
|
||||
user_id = auth.uid()
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM profiles p WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher')
|
||||
)
|
||||
);
|
||||
|
||||
-- Users can insert their own pass slips
|
||||
CREATE POLICY "pass_slips_insert" ON pass_slips FOR INSERT TO authenticated
|
||||
WITH CHECK (user_id = auth.uid());
|
||||
|
||||
-- Admins can update pass slips (approve/reject); users can complete their own
|
||||
CREATE POLICY "pass_slips_update" ON pass_slips FOR UPDATE TO authenticated
|
||||
USING (
|
||||
user_id = auth.uid()
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM profiles p WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher')
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user