37 lines
1.6 KiB
MySQL
37 lines
1.6 KiB
MySQL
|
|
-- Migration 082: Plattform-/Profil-Ausnahmen vom Vereins-Kontingent (M5+)
|
||
|
|
-- Superadmin & konfigurierbare Rollen/Profile verbrauchen kein club_feature_usage.
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS platform_role_club_feature_exemptions (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
portal_role TEXT NOT NULL,
|
||
|
|
feature_id TEXT REFERENCES features(id) ON DELETE CASCADE,
|
||
|
|
note TEXT,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uq_platform_role_club_feat_exempt
|
||
|
|
ON platform_role_club_feature_exemptions (portal_role, COALESCE(feature_id, '*'));
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS profile_club_feature_exemptions (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
profile_id INT NOT NULL REFERENCES profiles(id) ON DELETE CASCADE,
|
||
|
|
feature_id TEXT REFERENCES features(id) ON DELETE CASCADE,
|
||
|
|
reason TEXT,
|
||
|
|
set_by_profile_id INT REFERENCES profiles(id) ON DELETE SET NULL,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uq_profile_club_feat_exempt
|
||
|
|
ON profile_club_feature_exemptions (profile_id, COALESCE(feature_id, '*'));
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_profile_club_feat_exempt_profile
|
||
|
|
ON profile_club_feature_exemptions (profile_id);
|
||
|
|
|
||
|
|
-- Superadmin: alle Vereins-Features ohne Kontingent-Verbrauch
|
||
|
|
INSERT INTO platform_role_club_feature_exemptions (portal_role, feature_id, note)
|
||
|
|
SELECT 'superadmin', NULL, 'Plattform-Administrator: kein Vereins-Kontingent'
|
||
|
|
WHERE NOT EXISTS (
|
||
|
|
SELECT 1 FROM platform_role_club_feature_exemptions
|
||
|
|
WHERE portal_role = 'superadmin' AND feature_id IS NULL
|
||
|
|
);
|