evaluateState method
AsyncValue<bool>
evaluateState(
- UserSecurityContext context,
- ZenithPolicy policy, {
- PolicyRef? ref,
Shared evaluation for route guards and reactive authorization widgets.
Implementation
AsyncValue<bool> evaluateState(
UserSecurityContext context,
ZenithPolicy policy, {
PolicyRef? ref,
}) {
final requirements = policy.requirements ?? const <ZenithRequirement>[];
if (requirements.isEmpty &&
policy.evaluate == null &&
policy.evaluateAsync == null) {
return const AsyncData(false);
}
try {
for (final requirement in requirements) {
if (!requirement.evaluate(context)) return const AsyncData(false);
}
final policyRef = ref ?? PolicyRef();
if (policy.evaluate != null && !policy.evaluate!(policyRef)) {
return const AsyncData(false);
}
return policy.evaluateAsync?.call(policyRef) ?? const AsyncData(true);
} catch (_) {
return const AsyncData(false);
}
}