Files
team/server/channels/db/migrations/postgres/000159_deduplicate_policy_names.up.sql
562303e0fb MM-63848: Enforce unique names for parent access control policies (#35676)
* MM-63848: Enforce unique names for parent access control policies

* Revert accidental package-lock.json change

* fix translation file

* Fix lint shadows, migration overflow, and unique constraint fallback

* Remove pre-check, combine migrations, fix overflow

* Combine migrations using regular CREATE INDEX

* add missing translation

* kip revision bump on policy name-only changes and add test to cover this scenario

* MM-63848: Fix tx commit on name-only update, unique test names

---------

Co-authored-by: Mattermost Build <[email protected]>

Co-authored-by: Hanzo Dev <[email protected]>
2026-03-25 05:12:13 -05:00

14 lines
615 B
SQL

-- Deduplicate parent policy names before adding unique constraint.
-- The oldest policy (by CreateAt) keeps its original name; duplicates get ' (<id>)' appended.
UPDATE AccessControlPolicies AS p
SET Name = LEFT(p.Name, 128 - LENGTH(' (' || p.ID || ')')) || ' (' || p.ID || ')'
FROM (
SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY CreateAt ASC) AS rn
FROM AccessControlPolicies
WHERE Type = 'parent'
) AS dupes
WHERE p.ID = dupes.ID
AND dupes.rn > 1;
CREATE UNIQUE INDEX IF NOT EXISTS idx_accesscontrolpolicies_name_type ON AccessControlPolicies (Name, Type) WHERE Type = 'parent';