Папки шлюза по сети — два режима: простой (один логин) или через домен (группы и сотрудники bj)
- «Через домен»: сервер bj подключается к домену AD (winbind, один раз — учётной записью администратора домена, bj её не сохраняет); папки igate_exchange(_prod) открыты группам с ролью в bj и доменным сотрудникам bj — своим входом в Windows; краткое имя домена bj берёт из AD (crossRef nETBIOSName). - Список доступа bj сверяет сам: после изменения групп, сотрудников и настроек входа (через несколько секунд) и раз в 15 минут. - «Простой»: как было — один логин и пароль Samba; переход с домена выключает вход через домен (учётная запись компьютера в домене остаётся). - bj-igate-admin share: режимы simple/domain, join (realm, workgroup, admin), проверка списка доступа на недопустимые символы, состояние — mode/joined/realm. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package lkgateway
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// Папки шлюза «через домен»: доступ — группам с ролью в bj и доменным сотрудникам bj (включённым).
|
||||
func TestIgateShareValid(t *testing.T) {
|
||||
prev := globalUsers
|
||||
globalUsers = &userStore{users: map[string]*User{}}
|
||||
defer func() { globalUsers = prev }()
|
||||
globalUsers.users["azuev"] = &User{Login: "azuev", Source: "ad", Active: true, Role: "operator"}
|
||||
globalUsers.users["old"] = &User{Login: "old", Source: "ad", Active: false, Role: "viewer"}
|
||||
globalUsers.users["admin"] = &User{Login: "admin", Source: "local", Active: true, Role: "admin"}
|
||||
a := AuthSettings{ADGroups: []ADGroupRole{{Group: "CN=BJ-Operators,OU=Groups,DC=corp,DC=local", Role: "operator"}, {Group: "Депозитарий \"Главный\"", Role: "viewer"}}}
|
||||
got, err := igateShareValidWG(a, "CORP")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
want := `@"CORP\BJ-Operators", @"CORP\Депозитарий Главный", "CORP\azuev"`
|
||||
if got != want {
|
||||
t.Fatalf("\n got %s\nwant %s", got, want)
|
||||
}
|
||||
if strings.Contains(got, "old") || strings.Contains(got, "admin") {
|
||||
t.Fatal("в доступ попали отключённый или локальный пользователь")
|
||||
}
|
||||
globalUsers = &userStore{users: map[string]*User{}}
|
||||
if _, err := igateShareValidWG(AuthSettings{}, "CORP"); err == nil {
|
||||
t.Fatal("пустой список доступа должен быть ошибкой")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user