| |
| CREATE TABLE IF NOT EXISTS teams ( |
| id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), |
| name TEXT NOT NULL, |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP |
| ); |
|
|
| |
| CREATE TABLE IF NOT EXISTS team_members ( |
| id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), |
| team_id UUID REFERENCES teams(id) ON DELETE CASCADE, |
| user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE, |
| role TEXT CHECK (role IN ('admin', 'editor', 'viewer')) DEFAULT 'viewer', |
| UNIQUE(team_id, user_id) |
| ); |
|
|
| |
| ALTER TABLE projects ADD COLUMN IF NOT EXISTS team_id UUID REFERENCES teams(id); |
|
|
| |
| ALTER TABLE projects ENABLE ROW LEVEL SECURITY; |
|
|
| |
| CREATE POLICY "Team members can view team projects" ON projects |
| FOR SELECT USING ( |
| EXISTS ( |
| SELECT 1 FROM team_members |
| WHERE team_members.team_id = projects.team_id |
| AND team_members.user_id = auth.uid() |
| ) |
| ); |
|
|
| |
| CREATE POLICY "Team admins and editors can modify projects" ON projects |
| FOR ALL USING ( |
| EXISTS ( |
| SELECT 1 FROM team_members |
| WHERE team_members.team_id = projects.team_id |
| AND team_members.user_id = auth.uid() |
| AND team_members.role IN ('admin', 'editor') |
| ) |
| ); |
|
|
| |
| CREATE POLICY "Team members can view audit logs" ON audit_logs |
| FOR SELECT USING ( |
| EXISTS ( |
| SELECT 1 FROM projects |
| JOIN team_members ON team_members.team_id = projects.team_id |
| WHERE projects.id = audit_logs.task_id |
| AND team_members.user_id = auth.uid() |
| ) |
| ); |
|
|