{{/* Учётные записи: добавить сотрудника (роль плиткой, логин, пароль) и сотрудники из домена (подключение, поиск сотрудников и групп, доступ группам). Общий блок шага мастера «Учётные записи» и раздела Настройка → Пользователи. Вход: withRet <куда вернуться после сохранения>. */}} {{define "accountsAdd"}}{{$U := .D.Users}}

Кого добавить

{{range $r := $U.Roles}} {{end}}
{{if $U.Modules}}
Дополнительно к роли:{{range $U.Modules}}{{end}}
{{end}}

Пароль передайте сотруднику лично; сменить его можно позже: Настройка → Пользователи → «Изменить».

{{end}} {{define "accountsAD"}} {{$A := $.D.Settings.Auth}}{{$D := adDraft}}{{$on := and $A.ADEnabled $A.ADBindUser}}
Сотрудники из домена (Active Directory) — необязательно {{if $on}}
Домен {{$A.ADDomain}} подключёнконтроллер {{$A.ADServerHost}} · служебная запись {{$A.ADBindUser}}{{if $A.ADCAPEM}} · сертификат контроллера проверяется{{end}}
{{if $A.ADGroups}}
Группы домена с доступом в bj — их сотрудники входят без отдельной учётной записи:
{{range $A.ADGroups}}
{{.Name}} → {{roleTitle .Role}}
участники: …
{{end}}
{{end}} {{end}}
{{if and $A.ADEnabled $A.ADBindUser}}Другой домен или учётная запись{{else}}Подключить домен{{end}} {{/* пароль в страницу не попадает никогда — только пометка, что он есть */}} {{$bu := $A.ADBindUser}}{{$pw := ""}}{{if $A.ADBindPassword}}{{$pw = "задан"}}{{end}}{{$fs := ""}}{{$fd := ""}}{{$adv := false}} {{if $D}}{{$bu = $D.BindUser}}{{$pw = ""}}{{if $D.HasPassword}}{{$pw = "введён"}}{{end}}{{$fs = $D.Form.Server}}{{$fd = $D.Form.Domain}}{{$adv = $D.Form.Adv}}{{end}}

Введите учётную запись домена и пароль — домен и его контроллеры bj найдёт сам. Прав администратора домена не нужно; лучше отдельная служебная запись (например svc-bj): bj хранит её пароль, чтобы искать сотрудников.

Как создать служебную учётную запись для bj

bj читает AD обычной доменной учётной записью: проверяет пароль пользователя и его группы. Прав администратора домена ей не нужно — читать каталог могут все пользователи домена. Создаёт запись администратор домена:

  1. На контроллере домена (или компьютере с RSAT) откройте PowerShell от имени администратора домена.
  2. Скопируйте и выполните скрипт ниже. Он создаст svc-bj со случайным паролем и группы (или сообщит, что они уже есть) и в конце покажет итог и пароль.
  3. Добавьте сотрудников в группы bj-admins, bj-operators, bj-risk, bj-viewers — по ним bj назначит роли (группы можно переназначить после подключения).
  4. Здесь введите svc-bj@{{with $A.ADDomain}}{{.}}{{else}}ваш-домен{{end}} и пароль — «Подключить».
# Bridge&Join: служебная учётная запись для чтения AD и группы ролей
# Запуск: PowerShell от имени администратора домена (контроллер домена или компьютер с RSAT).
Import-Module ActiveDirectory
$dom    = Get-ADDomain                    # домен {{with $A.ADDomain}}{{.}}{{else}}ваш-домен{{end}}
$name   = "svc-bj"
$ou     = $dom.UsersContainer             # или своё OU, например "OU=Service Accounts,$($dom.DistinguishedName)"
$report = @()

# пароль — 24 случайных символа (буквы, цифры, знаки)
$chars = [char[]]'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789!#%*+-=?@'
$rng   = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$bytes = New-Object byte[] 24; $rng.GetBytes($bytes)
$plain = -join ($bytes | ForEach-Object { $chars[$_ % $chars.Length] })

$user = Get-ADUser -Filter "SamAccountName -eq '$name'" -ErrorAction SilentlyContinue
if ($user) {
  $report += "Пользователь $name уже есть: $($user.DistinguishedName) — пароль НЕ менялся"
  $plain = $null
} else {
  New-ADUser -Name $name -SamAccountName $name -UserPrincipalName "$name@$($dom.DNSRoot)" `
    -Path $ou -AccountPassword (ConvertTo-SecureString $plain -AsPlainText -Force) -Enabled $true `
    -PasswordNeverExpires $true -CannotChangePassword $true `
    -Description "Bridge&Join: чтение AD для входа пользователей (без прав администратора)"
  $report += "Создан пользователь $name@$($dom.DNSRoot) в $ou"
}

# группы, по которым bj назначает роли
$groups = [ordered]@{ "bj-admins" = "администраторы bj"; "bj-operators" = "операторы депозитария";
                      "bj-risk" = "риск-менеджеры (НПР)"; "bj-viewers" = "наблюдатели" }
foreach ($g in $groups.Keys) {
  $ex = Get-ADGroup -Filter "Name -eq '$g'" -ErrorAction SilentlyContinue
  if ($ex) {
    $report += "Группа $g уже есть: $($ex.DistinguishedName)"
  } else {
    New-ADGroup -Name $g -GroupScope Global -GroupCategory Security -Path $ou -Description "Bridge&Join: $($groups[$g])"
    $report += "Создана группа $g ($($groups[$g])) в $ou"
  }
}

Write-Host ""
Write-Host "===== Bridge&Join: итог =====" -ForegroundColor Cyan
$report | ForEach-Object { Write-Host " - $_" }
Write-Host ""
Write-Host "В bj (Пользователи и вход → Подключить домен):" -ForegroundColor Cyan
Write-Host "  учётная запись: $name@$($dom.DNSRoot)"
if ($plain) {
  Write-Host "  пароль:         $plain" -ForegroundColor Yellow
  Write-Host "  Скопируйте пароль в bj и закройте это окно — больше он нигде не показывается." -ForegroundColor Yellow
} else {
  Write-Host "  пароль: прежний (запись уже была). Новый: Set-ADAccountPassword $name -Reset"
}
Write-Host "Добавьте сотрудников в группы bj-* — по ним bj назначит роли."

Без модуля ActiveDirectory (cmd от администратора домена, * — запросит пароль):

dsadd user "CN=svc-bj,CN=Users,{{with $A.ADBaseDN}}{{.}}{{else}}DC=corp,DC=example,DC=ru{{end}}" -samid svc-bj -upn svc-bj@{{with $A.ADDomain}}{{.}}{{else}}ваш-домен{{end}} -pwd * -pwdneverexpires yes -canchpwd no -desc "Bridge&Join: чтение AD"

Рекомендуем: запретить этой записи интерактивный вход и вход по RDP (групповая политика «Запретить локальный вход», «Запретить вход через службу удалённых рабочих столов») — она нужна только для чтения каталога. Пароль bj хранит у себя; при смене пароля в AD обновите его здесь.

Расширенные настройки — если домен не найдётся сам

Пусто — bj ищет сам. Контроллер можно указать именем (bj попробует LDAPS 636, затем LDAP 389 со StartTLS) или адресом со схемой: ldaps://dc1.corp.example.ru:636.

{{if $D}}

Не подключено: {{$D.Err}}{{if not $D.Cert}} Поправьте и нажмите «Подключить» ещё раз — введённое сохранено.{{end}}

{{template "adTrustCard" (withRet $D $.Ret)}}{{end}}
{{end}}