Class AuditReadService
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
auditLoggerCompositeAuditLogger
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
queryAuditQuery
Returns
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
teamKeystringqueryAuditQuery
Returns
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.