addAuthFilterToQuery method

  1. @override
void addAuthFilterToQuery({
  1. required DbQueryWithClient query,
  2. required String collectionName,
  3. required DbPrincipal principal,
  4. required String action,
  5. 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);
}