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
921 stars 167 forks source link

[v2.0] addRolesToParent #223

Closed Taakn closed 7 years ago

Taakn commented 7 years ago

In some cases addRolesToParent does not add new roles to existing users. I think it's an issue with _usersInRoleQuery but can't find the pattern right now. Will update if I find something

mitar commented 7 years ago

Creating a reproduction would be great!

Taakn commented 7 years ago

This is my code, the PROMOCODES_VIEW role is added to some, but not all existing users. I don't know if you can spot something but I'm going to try to look into this further when I get the chance (code is in Meteor.startup)

Roles.createRole('driver.admin', {unlessExists: true});
Roles.createRole('driver.driver', {unlessExists: true});

var roles = [
  {name: 'RIDES_VIEW', parents: ['driver.admin']},
  {name: 'RIDES_INSERT', parents: ['driver.admin']},
  {name: 'RIDES_EDIT', parents: ['driver.admin']},
  {name: 'RIDES_DELETE', parents: ['driver.admin']},

  {name: 'VEHICLES_VIEW', parents: ['driver.admin']},
  {name: 'VEHICLES_INSERT', parents: ['driver.admin']},
  {name: 'VEHICLES_EDIT', parents: ['driver.admin']},
  {name: 'VEHICLES_DELETE', parents: ['driver.admin']},

  {name: 'ZONES_VIEW', parents: ['driver.admin']},
  {name: 'ZONES_INSERT', parents: ['driver.admin']},
  {name: 'ZONES_EDIT', parents: ['driver.admin']},
  {name: 'ZONES_DELETE', parents: ['driver.admin']},

  {name: 'DRIVERS_VIEW', parents: ['driver.admin']},
  {name: 'DRIVERS_INSERT', parents: ['driver.admin']},
  {name: 'DRIVERS_EDIT', parents: ['driver.admin']},
  {name: 'DRIVERS_DELETE', parents: ['driver.admin']},

  {name: 'SUBSCRIPTIONS_VIEW', parents: ['driver.admin']},
  {name: 'SUBSCRIPTIONS_INSERT', parents: ['driver.admin']},
  {name: 'SUBSCRIPTIONS_EDIT', parents: ['driver.admin']},
  {name: 'SUBSCRIPTIONS_DELETE', parents: ['driver.admin']},

  {name: 'DOCUMENTS_VIEW', parents: ['driver.admin']},
  {name: 'DOCUMENTS_INSERT', parents: ['driver.admin']},
  {name: 'DOCUMENTS_EDIT', parents: ['driver.admin']},
  {name: 'DOCUMENTS_DELETE', parents: ['driver.admin']},
  {name: 'DOCUMENTS_GENERATE_COMPANY', parents: ['driver.admin']},

  {name: 'TRANSLATIONS_VIEW', parents: ['driver.admin']},
  {name: 'TRANSLATIONS_INSERT', parents: ['driver.admin']},
  {name: 'TRANSLATIONS_EDIT', parents: ['driver.admin']},
  {name: 'TRANSLATIONS_DELETE', parents: ['driver.admin']},

  {name: 'ACCOUNTCHARGES_VIEW', parents: ['driver.admin']},
  {name: 'ACCOUNTCHARGES_INSERT', parents: ['driver.admin']},
  {name: 'ACCOUNTCHARGES_EDIT', parents: ['driver.admin']},
  {name: 'ACCOUNTCHARGES_DELETE', parents: ['driver.admin']},

  {name: 'PARTNERS_VIEW', parents: ['driver.admin']},
  {name: 'PARTNERS_INSERT', parents: ['driver.admin']},
  {name: 'PARTNERS_EDIT', parents: ['driver.admin']},
  {name: 'PARTNERS_DELETE', parents: ['driver.admin']},

  {name: 'CLIENTS_VIEW', parents: ['driver.admin']},
  {name: 'CLIENTS_INSERT', parents: ['driver.admin']},
  {name: 'CLIENTS_EDIT', parents: ['driver.admin']},
  {name: 'CLIENTS_DELETE', parents: ['driver.admin']},

  {name: 'PASSENGERS_VIEW', parents: ['driver.admin']},
  {name: 'PASSENGERS_INSERT', parents: ['driver.admin']},
  {name: 'PASSENGERS_EDIT', parents: ['driver.admin']},
  {name: 'PASSENGERS_DELETE', parents: ['driver.admin']},

  {name: 'PROMOCODES_VIEW', parents: ['driver.admin']},
  {name: 'PROMOCODES_INSERT', parents: ['driver.admin']},
  {name: 'PROMOCODES_EDIT', parents: ['driver.admin']},
  {name: 'PROMOCODES_DELETE', parents: ['driver.admin']},

  {name: 'FAVORITEADDRESSES_VIEW', parents: ['driver.admin']},
  {name: 'FAVORITEADDRESSES_INSERT', parents: ['driver.admin']},
  {name: 'FAVORITEADDRESSES_EDIT', parents: ['driver.admin']},
  {name: 'FAVORITEADDRESSES_DELETE', parents: ['driver.admin']},

  {name: 'ORGANIZATION_VIEW', parents: ['driver.admin']},
  {name: 'ORGANIZATION_EDIT', parents: ['driver.admin']},
]

for (var i=0; i<roles.length; i++) {

  var role = roles[i];
  Roles.createRole(role.name, {unlessExists: true});

  for (var j=0; j<(role.parents).length; j++) {
    Roles.addRolesToParent(role.name, (role.parents)[j]);
  }

}
mitar commented 7 years ago

Hm, can you make a repository with reproduction, where this happens after it is run? Does it happen always? Ror the same roles?

Taakn commented 7 years ago

There might have been a bug for one particular role. I will try to delete and recreate the roles. I didn't see anything in the logs though. But from your reaction I'm guessing you think my code is correct.

Thanks for being so quick to reply, I'll let you know what I find.

mitar commented 7 years ago

I do not see anything obviously wrong with your code, yes.

Taakn commented 7 years ago

I'm closing the issue I cannot find the source of the problem might have been a one time thing. That role is still missing though but I dont have enough time to thoroughly investigate. Thanks for your help though!

mitar commented 7 years ago

There is one particular role which is missing? Which one is that?