applyMask<O extends Object, V> method

V applyMask<O extends Object, V>(
  1. O object,
  2. String field,
  3. V value, {
  4. EntityAccessRulesContext? context,
  5. Type? type,
})

Implementation

V applyMask<O extends Object, V>(
  O object,
  String field,
  V value, {
  EntityAccessRulesContext? context,
  Type? type,
}) {
  type ??= object.runtimeType;

  if (ruleType == EntityAccessRuleType.mask) {
    var m = isMaskedEntityTypeField(
      type,
      field,
      context: context,
      direct: true,
    );
    if (m != null && m) {
      return _applyMask(context, object, field, value);
    }
  }

  final rules = this.rules;
  if (rules == null || rules.isEmpty) return value;

  var hasSubGroupRule = false;
  for (var rule in rules) {
    if (rule.ruleType == EntityAccessRuleType.mask) {
      var m = rule.isMaskedEntityTypeField(
        type,
        field,
        context: context,
        direct: true,
      );
      if (m != null && m) {
        return rule._applyMask(context, object, field, value);
      }
    } else if (rule.ruleType == null) {
      hasSubGroupRule = true;
    }
  }

  if (hasSubGroupRule) {
    for (var rule in rules) {
      if (rule.ruleType == null) {
        var m = rule.isMaskedEntityTypeField(type, field, context: context);
        if (m != null && m) {
          return rule.applyMask(
            object,
            field,
            value,
            context: context,
            type: type,
          );
        }
      }
    }
  }

  return value;
}