src/AbstractDataObject.php
public function extendedCan($methodName, $member) {
		$results = $this->extend($methodName, $member);
		if ($results && is_array($results)) {
			// Remove NULLs
			$results = array_filter($results, function ($v) {
				return !is_null($v);
			});
			// If there are any non-NULL responses, then return the lowest one of them.
			// If any explicitly deny the permission, then we don't get access
			if ($results) return min($results);
		}
		return null;
	}
public function extendedCan($methodName, $member) {
		$results = $this->extend($methodName, $member);
		if ($results && is_array($results)) {
			// Remove NULLs
			$results = array_filter($results, function ($v) {
				return !is_null($v);
			});
			// If there are any non-NULL responses, then return the lowest one of them.
			// If any explicitly deny the permission, then we don't get access
			if ($results) return min($results);
		}
		return null;
	}
Process tri-state responses from permission-alterting extensions.  The extensions are
expected to return one of three values:
- false: Disallow this permission, regardless of what other extensions say
- true: Allow this permission, as long as no other extensions return false
- NULL: Don't affect the outcome
This method itself returns a tri-state value, and is designed to be used like this:
<code>
$extended = $this->extendedCan('canDoSomething', $member);
if($extended !== null) return $extended;
else return $normalValue;
</code>

@param String $methodName Method on the same object, e.g. {@link canEdit()}
@param \Member|int $member
@return boolean|null