registerGateCallbacksSafely<TContext> function
Set<String>
registerGateCallbacksSafely<TContext>(
- AuthGateRegistry<
TContext> registry, - Map<
String, AuthGateCallback< entries, {TContext> > - Set<
String> managed = const <String>{},
Registers gate callbacks without overriding unmanaged existing entries.
Blank names are skipped. Existing entries are replaced only when their names
are listed in managed; unmanaged duplicates are ignored. Returns the
normalized names registered successfully.
Implementation
Set<String> registerGateCallbacksSafely<TContext>(
AuthGateRegistry<TContext> registry,
Map<String, AuthGateCallback<TContext>> entries, {
Set<String> managed = const <String>{},
}) {
final registered = <String>{};
entries.forEach((ability, callback) {
final trimmed = ability.trim();
if (trimmed.isEmpty) {
return;
}
final managedBefore = managed.contains(trimmed);
if (managedBefore) {
registry.unregister(trimmed);
}
try {
registry.register(trimmed, callback);
} on AuthGateRegistrationException {
if (!managedBefore) {
return;
}
rethrow;
}
registered.add(trimmed);
});
return registered;
}