Table of Contents

Class AuditReadService

Namespace
Tharga.Team.Service.Audit
Assembly
Tharga.Team.Service.dll

Both audit read services, over CompositeAuditLogger.

public sealed class AuditReadService : IAuditReadService, IAuditOversightService
Inheritance
AuditReadService
Implements
Inherited Members

Remarks

One class implementing both interfaces, registered twice — once team-bound, once system — so ScopeProxy applies a different rule to each. The interfaces carry the authorization difference; there is no behavioural difference below them worth a second type.

Constructors

AuditReadService(CompositeAuditLogger)

Both audit read services, over CompositeAuditLogger.

public AuditReadService(CompositeAuditLogger auditLogger)

Parameters

auditLogger CompositeAuditLogger

Remarks

One class implementing both interfaces, registered twice — once team-bound, once system — so ScopeProxy applies a different rule to each. The interfaces carry the authorization difference; there is no behavioural difference below them worth a second type.

Methods

QueryAllAsync(AuditQuery)

public Task<AuditQueryResult> QueryAllAsync(AuditQuery query)

Parameters

query AuditQuery

Returns

Task<AuditQueryResult>

Remarks

A TeamKey on the query is honoured as a filter. The caller is already authorized across every team, so narrowing to one is not an authorization decision — and refusing it would force them to fetch every team and filter client-side, which is worse in every respect.

QueryAsync(string, AuditQuery)

public Task<AuditQueryResult> QueryAsync(string teamKey, AuditQuery query)

Parameters

teamKey string
query AuditQuery

Returns

Task<AuditQueryResult>

Remarks

The team is taken from the argument the caller was authorized against, never from the query. A query naming a different team would otherwise read a team the scope check never saw.