Meteor-Community-Packages / meteor-roles

Authorization package for Meteor, compatible with built-in accounts packages
http://meteor-community-packages.github.io/meteor-roles/
MIT License
920 stars 164 forks source link

setUserRoles() gives Error: removed non-existent document when using publication Meteor.roleAssignment.find().observe() #316

Closed ggerber closed 4 years ago

ggerber commented 4 years ago

Hi,

I have this publication:

Meteor.publish('systems.list', function systemslist() {
  const self = this;
  if (populatedString(self.userId)) {
    const rolesHandle = Meteor.roleAssignment.find({'user._id': self.userId}).observe({
      added({scope}) {
        const system = Systems.findOne(scope, {fields: {name: 1}});
        if (populatedObject(system)) self.added('ManageSystems', scope, system);
      },
      changed({scope}) {
        const system = Systems.findOne(scope, {fields: {name: 1}});
        if (populatedObject(system)) self.changed('ManageSystems', scope, system);
      },
      removed({scope}) {
        self.removed('ManageSystems', scope);
      }
    });
    self.ready();
    self.onStop(() => {
      rolesHandle.stop();
    });
  } else self.ready();
});

I have this method:

const remove = args => {
  try {
    const {systemId, memberId} = args;
    Systems.remove(systemId);
    Roles.setUserRoles(memberId, [], systemId);
  } catch (err) {
    console.error('remove err', err);
  }
};

When the user executes the method the publication gives:

I20200224-11:18:39.030(2)? Exception in removed observe/observeChanges callback: Error: Removed nonexistent document kxJaxMP3YLazEo8De
I20200224-11:18:39.031(2)?     at SessionCollectionView.removed (packages/ddp-server/livedata_server.js:202:17)
I20200224-11:18:39.031(2)?     at Session.removed (packages/ddp-server/livedata_server.js:394:10)
I20200224-11:18:39.031(2)?     at Subscription.removed (packages/ddp-server/livedata_server.js:1298:19)
I20200224-11:18:39.031(2)?     at Object.removed (imports/api/publications/Systems.js:23:14)
I20200224-11:18:39.032(2)?     at _CachingChangeObserver.removed (packages/minimongo/local_collection.js:1323:28)
I20200224-11:18:39.032(2)?     at applyChange.removed (packages/minimongo/local_collection.js:735:27)
I20200224-11:18:39.032(2)?     at runWithEnvironment (packages/meteor.js:1286:24)
I20200224-11:18:39.032(2)?     at packages/meteor.js:1299:14
I20200224-11:18:39.032(2)?     at packages/mongo/observe_multiplex.js:182:30
I20200224-11:18:39.032(2)?     at Array.forEach (<anonymous>)
I20200224-11:18:39.033(2)?     at Function._.each._.forEach (packages/underscore.js:139:11)
I20200224-11:18:39.033(2)?     at Object.task (packages/mongo/observe_multiplex.js:176:9)
I20200224-11:18:39.033(2)?     at Meteor._SynchronousQueue.SQp._run (packages/meteor.js:917:16)
I20200224-11:18:39.033(2)?     at packages/meteor.js:894:12
ggerber commented 4 years ago

I made a repo: https://github.com/ggerber/roles_316

npm run x

signin as global@admin.com password: admin

right-click on the 'CHDM' button and choose 'delete'.

On the server the publication will give an error about removing a non-existing document

ggerber commented 4 years ago

My bad, this was an issue in my own code and not an issue with Meteor roles.

Thanks