diff --git a/rpg-docs/Model/Character/Characters.js b/rpg-docs/Model/Character/Characters.js index 6dbaa10f..ae48c16d 100644 --- a/rpg-docs/Model/Character/Characters.js +++ b/rpg-docs/Model/Character/Characters.js @@ -184,7 +184,11 @@ Schemas.Character = new SimpleSchema({ deathSave: { type: Schemas.DeathSave }, time: { type: Number, min: 0, decimal: true, defaultValue: 0}, initiativeRoll: { type: Number, min: 0, max: 1, decimal: true, defaultValue: 0}, - //TODO add permission stuff for owner, readers and writers + + //permissions + owner: { type: String, regEx: SimpleSchema.RegEx.Id }, + readers: { type: [String], regEx: SimpleSchema.RegEx.Id }, + writers: { type: [String], regEx: SimpleSchema.RegEx.Id } //TODO add per-character settings }); diff --git a/rpg-docs/lib/functions/permissions.js b/rpg-docs/lib/functions/permissions.js new file mode 100644 index 00000000..f55011f8 --- /dev/null +++ b/rpg-docs/lib/functions/permissions.js @@ -0,0 +1,13 @@ +canEditCharacter = function(charId, userId){ + userId = userId || Meteor.userId(); + var char = Characters.findOne(charId, {fields: {owner: 1, writers: 1}}); + if (!char) return false; + return (userId === char.owner || _.contains(char.writers, userId)); +}; + +canViewCharacter = function(charId, userId){ + userId = userId || Meteor.userId(); + var char = Characters.findOne(charId, {fields: {owner: 1, writers: 1, readers: 1}}); + if (!char) return false; + return (userId === char.owner || _.contains(char.writers, userId) || _.contains(char.readers, userId)); +};