Whether or not incomingScope has at least the same scoping access as this instance.
This check is used to determine if an Authorizer can allow a Request to pass if the Request's Request.authorization has a scope that has the same or more scope than there required scope of an Authorizer.
For example, the scope user:location would allow both user and user:location.
The scope user would allow user,
but would not allow user:location, as user:location is more restrictive than the required scope.
Source
bool allowsScope(AuthScope incomingScope) {
if (incomingScope._lastModifier != null) {
// If the modifier of the incoming scope is restrictive,
// and this scope requires no restrictions, then it's not allowed.
if (_lastModifier == null) {
return false;
}
// If the incoming scope's modifier doesn't match this one,
// then we also don't have access.
if (_lastModifier != incomingScope._lastModifier) {
return false;
}
}
// If we aren't restricted by modifier, let's make sure we have access.
var thisIterator = _segments.iterator;
for (var incomingSegment in incomingScope._segments) {
thisIterator.moveNext();
var current = thisIterator.current;
// If the incoming scope is more restrictive than this scope,
// then it's not allowed.
if (current == null) {
return false;
}
// If we have a mismatch here, then we're going
// down the wrong path.
if (incomingSegment.name != current.name) {
return false;
}
}
return true;
}