public function removeCallerPermission(Caller $caller, Permission $permission)
    {
        // Remove permissions which match the action and resource
        $this->permissions[$this->getCallerKey($caller)] = array_filter(
            $this->getCallerPermissions($caller),
            function (Permission $callerPermission) use ($permission) {
                // Only keep permissions which don't exactly match the one which we're trying to remove.
                return ! $callerPermission->matchesPermission($permission);
            }
        );
    }