25 lines
828 B
PL/PgSQL
25 lines
828 B
PL/PgSQL
BEGIN;
|
|
|
|
ALTER TABLE user_account
|
|
ADD COLUMN account_kind varchar(24) NOT NULL DEFAULT 'customer'
|
|
CHECK (account_kind IN ('customer','operator'));
|
|
|
|
UPDATE user_account
|
|
SET account_kind='operator'
|
|
WHERE platform_role <> 'customer';
|
|
|
|
ALTER TABLE user_account
|
|
ADD CONSTRAINT user_account_kind_role_check CHECK (
|
|
(account_kind='customer' AND platform_role='customer') OR
|
|
(account_kind='operator' AND platform_role IN ('ops_viewer','ops_operator','ops_approver','ops_admin'))
|
|
);
|
|
|
|
CREATE INDEX user_account_operator_identity_idx
|
|
ON user_account(oidc_issuer,oidc_subject,tenant_id)
|
|
WHERE account_kind='operator' AND status='active';
|
|
|
|
COMMENT ON COLUMN user_account.account_kind IS
|
|
'Hard boundary between household customer identities and dedicated maintenance operator identities.';
|
|
|
|
COMMIT;
|