addAuthFilterToQuery method
void
addAuthFilterToQuery({
- required DbQueryWithClient query,
- required String collectionName,
- required DbPrincipal principal,
- required String action,
- required bool filterByTenant,
override
Implementation
@override
void addAuthFilterToQuery({
required DbQueryWithClient query,
required String collectionName,
required DbPrincipal principal,
required String action,
required bool filterByTenant,
}) {
final filterBuffer = StringBuffer();
if (filterByTenant) {
filterBuffer.writeln(' c.meta.tenantKey == @tenantKey ');
}
if (action.isNotEmpty) {
filterBuffer.writeln(''' ${filterBuffer.isEmpty ? '' : ' && '}
length(c.meta.shares[* FILTER CURRENT.userKey == @userKey && @action IN CURRENT.actions ]) > 0 ''');
}
final filter = filterBuffer.toString();
query
..addLine('''let $collectionName = (
for c in $collectionName
filter $filter
return c
)''')
..addBindVarIfThen(filterByTenant, 'tenantKey', principal.tenantKey)
..addBindVarIfThen(action != '', 'userKey', principal.userKey)
..addBindVarIfThen(action != '', 'action', action);
}