修复管理员项目权限上下文

补齐管理员请求的操作者身份上下文,恢复超级管理员读取和管理 SSH 私钥的项目授权,并增加回归测试。
This commit is contained in:
xuans 2026-09-30 04:58:58 +08:00
parent 0c64fdb60b
commit 4229f44810
2 changed files with 34 additions and 0 deletions

View File

@ -72,6 +72,7 @@ func (s *Server) requireAdmin(c *gin.Context) {
})
return
}
c.Set(authenticatedActorKey, session.UserID)
c.Next()
}

View File

@ -19,6 +19,39 @@ import (
"git.pcux.cn/xuans/Scert/backend/internal/sshkey"
)
func TestSSHKeyAPIAllowsSuperAdminProjectAuthorization(t *testing.T) {
directory := t.TempDir()
cfg := readyTestConfig(directory)
cfg.Database.DSN = filepath.Join(directory, "data", "ssh-keys-super-admin.db")
db, err := database.Open(context.Background(), cfg.Database)
if err != nil {
t.Fatalf("open database: %v", err)
}
defer db.Close()
if err := database.Migrate(context.Background(), db.DB, "sqlite"); err != nil {
t.Fatalf("migrate database: %v", err)
}
if _, err := db.DB.ExecContext(t.Context(), `INSERT INTO users (id, username, email, password_hash, role, status) VALUES ('super-admin', 'super-admin', 'super-admin@example.invalid', 'test-only-no-login', 'super_admin', 'active')`); err != nil {
t.Fatalf("create super admin: %v", err)
}
store, err := secretstore.Open(filepath.Join(directory, "config"))
if err != nil {
t.Fatalf("open secret store: %v", err)
}
server := New(Dependencies{
Config: cfg,
Repository: repository.NewSQLDomainRepository(db.DB),
ProjectDomains: repository.NewSQLProjectMemberRepository(db.DB),
SSHKeys: sshkey.NewService(store),
})
response := httptest.NewRecorder()
request := httptest.NewRequest(http.MethodGet, "/api/v1/ssh-keys", nil)
request.AddCookie(httpUserSessionCookie(server, "super-admin", repository.UserRoleSuperAdmin))
server.Handler().ServeHTTP(response, request)
if response.Code != http.StatusOK {
t.Fatalf("super admin SSH key list failed: %d %s", response.Code, response.Body.String())
}
}
func TestSSHKeyAPIHidesPrivateKeyAndBlocksDeletingUsedReference(t *testing.T) {
directory := t.TempDir()
cfg := readyTestConfig(directory)