If the logic for permissions is the same, you can simply define it once in permissions.js
App = App || {}; // We are using Namespaces, so you don't have to.. but it good App.Permissions = { insert: function(userId) { var loggedInUser = Meteor.user() if (loggedInUser && Roles.userIsInRole(loggedInUser, ['admin','editor'])) return true; }, update: function(userId) { var loggedInUser = Meteor.user() if (loggedInUser && Roles.userIsInRole(loggedInUser, ['admin','editor'])) return true; } }
And then you can use it for your collections:
Cars.allow(App.Permissions); // Or Cars.allow(App.Permissions.getPermissionsForGroup('cars'))
Define roles somewhere ..
Roles
// Give user the role "editor" in "cars" group Roles.addUsersToRoles(someUserId, ['editor'], 'cars'); Roles.addUsersToRoles(someOtherId, ['admin'], 'cars');
What can you prepare in permissions.js as follows:
Permissions
App = App || {}; App.Permissions = { insert: function(userId) {...}, update: function(userId) {...}, getPermissionsForGroup: function(group) { return { insert: function(userId, doc) { // Only admin can insert return Roles.userIsInRole(userId, "admin", group); }, update: function(userId, doc, fields, modifier) { // Editor & Admin can edit return Roles.userIsInRole(userId, ["editor","admin"], group); }, remove: function(userId, doc) { // Only admin can remove return Roles.userIsInRole(userId, "admin", group); } } }
In this example, admins can be inserted and updated .. and editors can be updated, but inserted.
Regarding the Alaning documentation: the roles you define and use such roles:
// Super Admin definition.. Roles.addUsersToRoles(superAdminId, ['admin'], Roles.GLOBAL_GROUP); Roles.addUsersToRoles(joesUserId, ['manage-team','schedule-game'], 'manchester-united.com') Roles.addUsersToRoles(joesUserId, ['player','goalie'], 'real-madrid.com') Roles.userIsInRole(joesUserId, 'manage-team', 'manchester-united.com') // => true Roles.userIsInRole(joesUserId, 'manage-team', 'real-madrid.com') // => false
Yes, make sure that permission logic is enabled before defining your collection. Obviously :)