code: public function permissionMatchesRequest(
      	$permissionUrl = '',
      	$requestUrl = '',
      	$resourceType = Storage::RESOURCE_UNKNOWN,
      	$requiredPermission = CredentialsAbstract::PERMISSION_READ
      ) {
          // Build requirements
          $requiredResourceType = $resourceType;
          if ($requiredResourceType == Storage::RESOURCE_BLOB) {
              $requiredResourceType .= Storage::RESOURCE_CONTAINER;
          }
  
          // Parse permission url
  	    $parsedPermissionUrl = parse_url($permissionUrl);
  
  	    // Parse permission properties
  	    $permissionParts = explode('&', $parsedPermissionUrl['query']);
  
  	    // Parse request url
  	    $parsedRequestUrl = parse_url($requestUrl);
  
  	    // Check if permission matches request
  	    $matches = true;
  	    foreach ($permissionParts as $part) {
  	        list($property, $value) = explode('=', $part, 2);
  
  	        if ($property == 'sr') {
  	            $matches = $matches && (strpbrk($value, $requiredResourceType) !== false);
  	        }
  
  	    	if ($property == 'sp') {
  	            $matches = $matches && (strpbrk($value, $requiredPermission) !== false);
  	        }
  	    }
  
  	    // Ok, but... does the resource match?
  	    $matches = $matches && (strpos($parsedRequestUrl['path'], $parsedPermissionUrl['path']) !== false);
  
          // Return
  	    return $matches;
      }
docs: Permission matches request?
  
  @param string $permissionUrl Permission URL
  @param string $requestUrl Request URL
  @param string $resourceType Resource type
  @param string $requiredPermission Required permission
  @return string Signed request URL