policyGate<TContext, T extends Object> function

AuthGateCallback<TContext> policyGate<TContext, T extends Object>(
  1. Policy<T> policy,
  2. PolicyAction action
)

Builds a gate callback for a specific policy action.

PolicyAction.create ignores the payload. View, update, and delete return false when the payload is not a T; policy results may be synchronous or asynchronous.

Implementation

AuthGateCallback<TContext> policyGate<TContext, T extends Object>(
  Policy<T> policy,
  PolicyAction action,
) {
  return (AuthGateEvaluationContext<TContext> context) {
    final principal = context.principal;
    final payload = context.payload;
    switch (action) {
      case PolicyAction.view:
        if (payload is T) {
          return policy.canView(principal, payload);
        }
        return false;
      case PolicyAction.create:
        return policy.canCreate(principal);
      case PolicyAction.update:
        if (payload is T) {
          return policy.canUpdate(principal, payload);
        }
        return false;
      case PolicyAction.delete:
        if (payload is T) {
          return policy.canDelete(principal, payload);
        }
        return false;
    }
  };
}