Files
SGF/database/migrations/2026_10_25_020000_lock_membership_identifiers.php
T

28 lines
1003 B
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
DB::unprepared(<<<'SQL'
CREATE OR REPLACE FUNCTION sgf_immutable_membership() RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
IF NEW.user_id IS DISTINCT FROM OLD.user_id OR NEW.tenant_id IS DISTINCT FROM OLD.tenant_id OR NEW.company_id IS DISTINCT FROM OLD.company_id THEN
RAISE EXCEPTION 'SGF_IMMUTABLE_OWNERSHIP';
END IF;
RETURN NEW;
END; $$;
CREATE TRIGGER membership_immutable BEFORE UPDATE ON company_memberships FOR EACH ROW EXECUTE FUNCTION sgf_immutable_membership();
SQL);
}
public function down(): void
{
DB::statement('DROP TRIGGER IF EXISTS membership_immutable ON company_memberships');
DB::statement('DROP FUNCTION IF EXISTS sgf_immutable_membership()');
}
};