You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
-- Organization-level Google Calendar (shared across all members) |
|
|
|
CREATE TABLE IF NOT EXISTS org_google_calendars ( |
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), |
|
org_id UUID REFERENCES organizations(id) ON DELETE CASCADE UNIQUE, |
|
calendar_id TEXT NOT NULL, -- Google Calendar ID (e.g., "abc123@group.calendar.google.com") |
|
calendar_name TEXT, |
|
connected_by UUID REFERENCES auth.users(id), |
|
access_token TEXT NOT NULL, |
|
refresh_token TEXT NOT NULL, |
|
token_expires_at TIMESTAMPTZ NOT NULL, |
|
created_at TIMESTAMPTZ DEFAULT now(), |
|
updated_at TIMESTAMPTZ DEFAULT now() |
|
); |
|
|
|
-- Index |
|
CREATE INDEX IF NOT EXISTS idx_org_google_calendars_org ON org_google_calendars(org_id); |
|
|
|
-- RLS |
|
ALTER TABLE org_google_calendars ENABLE ROW LEVEL SECURITY; |
|
|
|
-- All org members can view the org calendar connection |
|
CREATE POLICY "Org members can view org calendar" ON org_google_calendars |
|
FOR SELECT USING (EXISTS ( |
|
SELECT 1 FROM org_members om |
|
WHERE om.org_id = org_google_calendars.org_id |
|
AND om.user_id = auth.uid() |
|
)); |
|
|
|
-- Only admins/owners can manage org calendar |
|
CREATE POLICY "Admins can manage org calendar" ON org_google_calendars |
|
FOR ALL USING (EXISTS ( |
|
SELECT 1 FROM org_members om |
|
WHERE om.org_id = org_google_calendars.org_id |
|
AND om.user_id = auth.uid() |
|
AND om.role IN ('owner', 'admin') |
|
));
|
|
|