- Users: 4 profils (admin/coordinator/operator/viewer) remplacent la matrix - /users/add: picker contacts iTop (plus de creation libre) - /me/change-password: flow force_password_change - LDAP: service + section settings + option login - Sync iTop contacts: filtre par teams (SecOps/iPOP/Externe/DSI/Admin DSI) - Auto-desactivation users si contact inactif - etat: alignement sur enum iTop (production/implementation/stock/obsolete) - Menu: Contacts dans Administration, Serveurs en groupe repliable - Audit bases: demo/prod via JWT mode Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
24 lines
1.1 KiB
SQL
24 lines
1.1 KiB
SQL
-- Link users to iTop Person
|
|
ALTER TABLE users ADD COLUMN IF NOT EXISTS itop_person_id INTEGER;
|
|
ALTER TABLE users ADD COLUMN IF NOT EXISTS last_itop_sync TIMESTAMP;
|
|
ALTER TABLE users ADD COLUMN IF NOT EXISTS force_password_change BOOLEAN DEFAULT false;
|
|
|
|
-- source already implied by auth_type, no change
|
|
|
|
-- Link contacts to iTop Person
|
|
ALTER TABLE contacts ADD COLUMN IF NOT EXISTS itop_id INTEGER;
|
|
ALTER TABLE contacts ADD COLUMN IF NOT EXISTS telephone VARCHAR(50);
|
|
ALTER TABLE contacts ADD COLUMN IF NOT EXISTS team VARCHAR(100);
|
|
ALTER TABLE contacts ADD COLUMN IF NOT EXISTS function VARCHAR(200);
|
|
|
|
-- Unique constraint on email for linking users
|
|
CREATE UNIQUE INDEX IF NOT EXISTS users_email_unique_active ON users (LOWER(email)) WHERE email IS NOT NULL AND email != '';
|
|
|
|
-- Match existing users to contacts by email
|
|
UPDATE users u SET itop_person_id = c.itop_id
|
|
FROM contacts c
|
|
WHERE u.email IS NOT NULL AND u.email != '' AND LOWER(u.email) = LOWER(c.email) AND c.itop_id IS NOT NULL;
|
|
|
|
SELECT COUNT(*) as users_linked FROM users WHERE itop_person_id IS NOT NULL;
|
|
SELECT COUNT(*) as users_total FROM users;
|