nordabiz/database/migrations/047_event_access_control.sql
Maciej Pienczyn 61345fa260
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
feat: Add event access control for Rada Izby meetings
- Add access_level field to norda_events (public, members_only, rada_only)
- Add is_rada_member field to users table
- Add can_user_view() and can_user_attend() methods to NordaEvent model
- Update calendar routes to filter events by user permissions
- Add access_level dropdown to admin event form
- Rada Izby events only visible to designated board members
- Regular member meetings visible to all NORDA members

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 12:41:42 +01:00

71 lines
2.4 KiB
SQL

-- Migration: Event Access Control
-- Date: 2026-02-03
-- Description: Adds access control fields to norda_events and is_rada_member to users
-- Purpose: Allow restricting events to specific groups (Rada Izby vs all members)
-- =====================================================
-- 1. Add access control fields to norda_events
-- =====================================================
-- access_level: 'public' (all logged in), 'members_only' (MEMBER+), 'rada_only' (only Rada Izby members)
ALTER TABLE norda_events
ADD COLUMN IF NOT EXISTS access_level VARCHAR(50) DEFAULT 'members_only';
COMMENT ON COLUMN norda_events.access_level IS 'Event visibility: public, members_only, rada_only';
-- Update existing events based on event_type
-- Rada Izby events should be rada_only
UPDATE norda_events
SET access_level = 'rada_only'
WHERE title ILIKE '%Rada Izby%' OR event_type = 'rada';
-- Other events are members_only by default
UPDATE norda_events
SET access_level = 'members_only'
WHERE access_level IS NULL;
-- =====================================================
-- 2. Add is_rada_member field to users
-- =====================================================
ALTER TABLE users
ADD COLUMN IF NOT EXISTS is_rada_member BOOLEAN DEFAULT FALSE;
COMMENT ON COLUMN users.is_rada_member IS 'User is a member of Rada Izby (Board Council)';
-- =====================================================
-- 3. Create index for faster event filtering
-- =====================================================
CREATE INDEX IF NOT EXISTS idx_norda_events_access_level
ON norda_events(access_level);
-- =====================================================
-- 4. Grant permissions
-- =====================================================
GRANT ALL ON TABLE norda_events TO nordabiz_app;
GRANT ALL ON TABLE users TO nordabiz_app;
-- =====================================================
-- Verification
-- =====================================================
DO $$
BEGIN
-- Check if columns exist
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'norda_events' AND column_name = 'access_level'
) THEN
RAISE NOTICE 'Column norda_events.access_level created successfully';
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'is_rada_member'
) THEN
RAISE NOTICE 'Column users.is_rada_member created successfully';
END IF;
END $$;