主流程

This commit is contained in:
2026-06-10 17:53:09 +08:00
parent c6f239f424
commit b20435c027
66 changed files with 2779 additions and 1181 deletions
+58 -3
View File
@@ -212,10 +212,33 @@ func (r *fakeAcpRepo) DeleteAgentKind(_ context.Context, _ uuid.UUID) error { re
func (r *fakeAcpRepo) CountAgentKindUsage(_ context.Context, _ uuid.UUID) (int64, error) {
return 0, nil
}
func (r *fakeAcpRepo) ListSessionsByUser(_ context.Context, _ uuid.UUID) ([]*acp.Session, error) {
return nil, nil
func (r *fakeAcpRepo) ListSessionsByUser(_ context.Context, userID uuid.UUID, reqID *uuid.UUID) ([]*acp.Session, error) {
r.mu.Lock()
defer r.mu.Unlock()
var out []*acp.Session
for _, s := range r.sessions {
if s.UserID != userID {
continue
}
if reqID != nil && (s.RequirementID == nil || *s.RequirementID != *reqID) {
continue
}
out = append(out, s)
}
return out, nil
}
func (r *fakeAcpRepo) ListAllSessions(_ context.Context, reqID *uuid.UUID) ([]*acp.Session, error) {
r.mu.Lock()
defer r.mu.Unlock()
var out []*acp.Session
for _, s := range r.sessions {
if reqID != nil && (s.RequirementID == nil || *s.RequirementID != *reqID) {
continue
}
out = append(out, s)
}
return out, nil
}
func (r *fakeAcpRepo) ListAllSessions(_ context.Context) ([]*acp.Session, error) { return nil, nil }
func (r *fakeAcpRepo) UpdateSessionRunning(_ context.Context, _ uuid.UUID, _ string, _ int32) error {
return nil
}
@@ -440,3 +463,35 @@ func (f *fakeAcpRepo) ExpirePendingPermissionRequestsBySession(context.Context,
func (f *fakeAcpRepo) ExpireStalePermissionRequests(context.Context, time.Time) (int64, error) {
return 0, nil
}
func TestSessionService_List_RequirementFilter(t *testing.T) {
t.Parallel()
uid := uuid.New()
reqID := uuid.New()
repo := &fakeAcpRepo{}
repo.sessions = []*acp.Session{
{ID: uuid.New(), UserID: uid, RequirementID: &reqID},
{ID: uuid.New(), UserID: uid},
{ID: uuid.New(), UserID: uuid.New(), RequirementID: &reqID},
}
svc := acp.NewSessionService(
repo, nil, nil, nil, nil, nil, nil,
acp.SessionServiceConfig{}, nil,
)
// 普通用户:仅本人 + requirement 过滤
list, err := svc.List(context.Background(), acp.Caller{UserID: uid}, acp.SessionListFilter{RequirementID: &reqID})
require.NoError(t, err)
require.Len(t, list, 1)
// 非 admin 请求 all → 403
_, err = svc.List(context.Background(), acp.Caller{UserID: uid}, acp.SessionListFilter{All: true})
require.Error(t, err)
// admin all + requirement 过滤:跨用户 2 条
list, err = svc.List(context.Background(), acp.Caller{UserID: uid, IsAdmin: true}, acp.SessionListFilter{All: true, RequirementID: &reqID})
require.NoError(t, err)
require.Len(t, list, 2)
}