[CLAUDE] Scripts: rename 20 test user sang role-based naming (S22+3)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m6s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m6s
Bro feedback: "đổi tên thành roles luôn đi cho dễ test, để user ít nhầm lẫn"
20 user S22+2 đã rename:
Email pattern: {dept}.{level}@solutions.com.vn
- act.nv / act.pp / act.tp
- bod.1 / bod.2 (no hierarchy)
- equ.nv / equ.pp / equ.tp
- fin.nv / fin.pp / fin.tp
- hra.nv / hra.pp / hra.tp
- pm.nv / pm.pp / pm.tp
- qs.nv / qs.pp / qs.tp
FullName pattern: "{DEPT} {LEVEL} - {Roles} [Flags]"
- [Bypass] = CanBypassReview=true (act.tp, hra.tp)
- [SkipFinal] = AllowDrafterSkipToFinal=true (fin.pp, pm.nv)
Identity rename pattern per gotcha #38 — 4 fields atomic UPDATE:
Email + NormalizedEmail + UserName + NormalizedUserName + FullName.
Implementation:
- Build single SQL transaction 20 UPDATE
- SET QUOTED_IDENTIFIER ON (required filtered indexes Users)
- SCP file → SSH sqlcmd execute (avoid shell quote escape hell)
Verify:
- 20 rows UPDATE affected (1 mỗi user)
- Login test act.nv / TestUser@2026 → ACT NV - Drafter+Accounting OK
- NormalizedEmail + NormalizedUserName uppercase match Identity convention
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
77
scripts/rename-test-users-to-roles.ps1
Normal file
77
scripts/rename-test-users-to-roles.ps1
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Rename 20 test user S22+2 sang naming role-based de UAT de phan biet
|
||||||
|
#
|
||||||
|
# Email format: {dept-lower}.{level}@solutions.com.vn
|
||||||
|
# - act.nv / act.pp / act.tp
|
||||||
|
# - bod.1 / bod.2 (no hierarchy)
|
||||||
|
# - equ.nv / equ.pp / equ.tp
|
||||||
|
# - fin.nv / fin.pp / fin.tp
|
||||||
|
# - hra.nv / hra.pp / hra.tp
|
||||||
|
# - pm.nv / pm.pp / pm.tp
|
||||||
|
# - qs.nv / qs.pp / qs.tp
|
||||||
|
#
|
||||||
|
# FullName format: "{DEPT} {LEVEL} - {Roles} [Flags]"
|
||||||
|
# - Flag [Bypass] = CanBypassReview=true (2-stage skip)
|
||||||
|
# - Flag [SkipFinal] = AllowDrafterSkipToFinal=true (F2 Mig 29)
|
||||||
|
#
|
||||||
|
# Identity rename pattern per gotcha #38 — must update 4 fields atomically:
|
||||||
|
# Email + NormalizedEmail + UserName + NormalizedUserName + FullName.
|
||||||
|
#
|
||||||
|
# Run qua SSH vietreport-vps + sqlcmd 1 transaction.
|
||||||
|
#
|
||||||
|
# Usage: .\scripts\rename-test-users-to-roles.ps1
|
||||||
|
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
# Mapping: old email -> new email + new FullName
|
||||||
|
$renames = @(
|
||||||
|
@{ Old='hoa.nguyen@solutions.com.vn'; New='act.nv@solutions.com.vn'; FullName='ACT NV - Drafter+Accounting' },
|
||||||
|
@{ Old='lan.pham@solutions.com.vn'; New='act.pp@solutions.com.vn'; FullName='ACT PP - Drafter+Accounting' },
|
||||||
|
@{ Old='minh.le@solutions.com.vn'; New='act.tp@solutions.com.vn'; FullName='ACT TP - DeptMgr+Accounting [Bypass]' },
|
||||||
|
@{ Old='tuan.tran@solutions.com.vn'; New='bod.1@solutions.com.vn'; FullName='BOD 1 - Director' },
|
||||||
|
@{ Old='hung.do@solutions.com.vn'; New='bod.2@solutions.com.vn'; FullName='BOD 2 - Director+AuthSigner' },
|
||||||
|
@{ Old='dung.bui@solutions.com.vn'; New='equ.nv@solutions.com.vn'; FullName='EQU NV - Drafter+Equipment' },
|
||||||
|
@{ Old='hai.vu@solutions.com.vn'; New='equ.pp@solutions.com.vn'; FullName='EQU PP - Drafter+Equipment' },
|
||||||
|
@{ Old='tho.do@solutions.com.vn'; New='equ.tp@solutions.com.vn'; FullName='EQU TP - DeptMgr+Equipment' },
|
||||||
|
@{ Old='linh.dao@solutions.com.vn'; New='fin.nv@solutions.com.vn'; FullName='FIN NV - Drafter+Finance' },
|
||||||
|
@{ Old='nga.bui@solutions.com.vn'; New='fin.pp@solutions.com.vn'; FullName='FIN PP - Drafter+Finance [SkipFinal]' },
|
||||||
|
@{ Old='thu.pham@solutions.com.vn'; New='fin.tp@solutions.com.vn'; FullName='FIN TP - DeptMgr+Finance' },
|
||||||
|
@{ Old='mai.tran@solutions.com.vn'; New='hra.nv@solutions.com.vn'; FullName='HRA NV - Drafter+HrAdmin' },
|
||||||
|
@{ Old='hong.le@solutions.com.vn'; New='hra.pp@solutions.com.vn'; FullName='HRA PP - Drafter+HrAdmin' },
|
||||||
|
@{ Old='tam.nguyen@solutions.com.vn'; New='hra.tp@solutions.com.vn'; FullName='HRA TP - DeptMgr+HrAdmin [Bypass]' },
|
||||||
|
@{ Old='khoi.do@solutions.com.vn'; New='pm.nv@solutions.com.vn'; FullName='PM NV - Drafter+PM [SkipFinal]' },
|
||||||
|
@{ Old='phong.vu@solutions.com.vn'; New='pm.pp@solutions.com.vn'; FullName='PM PP - Drafter+PM' },
|
||||||
|
@{ Old='quan.bui@solutions.com.vn'; New='pm.tp@solutions.com.vn'; FullName='PM TP - DeptMgr+PM' },
|
||||||
|
@{ Old='hieu.nguyen@solutions.com.vn'; New='qs.nv@solutions.com.vn'; FullName='QS NV - Drafter' },
|
||||||
|
@{ Old='thanh.pham@solutions.com.vn'; New='qs.pp@solutions.com.vn'; FullName='QS PP - Drafter' },
|
||||||
|
@{ Old='duc.le@solutions.com.vn'; New='qs.tp@solutions.com.vn'; FullName='QS TP - DeptMgr' }
|
||||||
|
)
|
||||||
|
|
||||||
|
# Build SQL transaction (SET QUOTED_IDENTIFIER ON required for filtered indexes on Users)
|
||||||
|
$sqlLines = @('SET QUOTED_IDENTIFIER ON;', 'BEGIN TRAN;')
|
||||||
|
foreach ($r in $renames) {
|
||||||
|
$newNormalized = $r.New.ToUpper()
|
||||||
|
$sqlLines += "UPDATE Users SET Email='$($r.New)', NormalizedEmail='$newNormalized', UserName='$($r.New)', NormalizedUserName='$newNormalized', FullName='$($r.FullName)' WHERE Email='$($r.Old)';"
|
||||||
|
}
|
||||||
|
$sqlLines += 'COMMIT;'
|
||||||
|
$sqlLines += "SELECT Email, FullName FROM Users WHERE Email LIKE '%.nv@%' OR Email LIKE '%.pp@%' OR Email LIKE '%.tp@%' OR Email LIKE 'bod.%' ORDER BY Email;"
|
||||||
|
$sqlScript = $sqlLines -join "`n"
|
||||||
|
|
||||||
|
Write-Host "==> Running rename transaction via SSH vietreport-vps..." -ForegroundColor Cyan
|
||||||
|
Write-Host " Total renames: $($renames.Count)" -ForegroundColor Gray
|
||||||
|
|
||||||
|
# Escape sqlcmd args via tempfile to avoid shell quoting issues
|
||||||
|
$tmpPath = [System.IO.Path]::GetTempFileName() + '.sql'
|
||||||
|
$sqlScript | Out-File -FilePath $tmpPath -Encoding ASCII
|
||||||
|
|
||||||
|
# SCP file to VPS then execute
|
||||||
|
$remotePath = 'C:\Windows\Temp\rename-users.sql'
|
||||||
|
& scp $tmpPath "vietreport-vps:$remotePath"
|
||||||
|
& ssh vietreport-vps "sqlcmd -S .\SQLEXPRESS -d SolutionErp -E -i $remotePath"
|
||||||
|
|
||||||
|
Remove-Item $tmpPath -Force
|
||||||
|
Write-Host "==> Rename complete. Login test:" -ForegroundColor Green
|
||||||
|
Write-Host " act.nv@solutions.com.vn / TestUser@2026" -ForegroundColor Magenta
|
||||||
|
Write-Host " fin.pp@solutions.com.vn / TestUser@2026 (SkipFinal)" -ForegroundColor Magenta
|
||||||
|
Write-Host " pm.nv@solutions.com.vn / TestUser@2026 (SkipFinal)" -ForegroundColor Magenta
|
||||||
|
Write-Host " act.tp@solutions.com.vn / TestUser@2026 (Bypass)" -ForegroundColor Magenta
|
||||||
|
Write-Host " hra.tp@solutions.com.vn / TestUser@2026 (Bypass)" -ForegroundColor Magenta
|
||||||
Reference in New Issue
Block a user