AccountSettings = new Mongo.Collection('accountSettings'); AccountSettings.attachSchema( new SimpleSchema({ _id: { type: String, }, booleanValue: { type: Boolean, optional: true, }, sort: { type: Number, decimal: true, }, createdAt: { type: Date, optional: true, // eslint-disable-next-line consistent-return autoValue() { if (this.isInsert) { return new Date(); } else if (this.isUpsert) { return { $setOnInsert: new Date() }; } else { this.unset(); } }, }, modifiedAt: { type: Date, denyUpdate: false, // eslint-disable-next-line consistent-return autoValue() { if (this.isInsert || this.isUpsert || this.isUpdate) { return new Date(); } else { this.unset(); } }, }, }), ); AccountSettings.allow({ update(userId) { const user = Users.findOne(userId); return user && user.isAdmin; }, }); if (Meteor.isServer) { Meteor.startup(() => { AccountSettings._collection._ensureIndex({ modifiedAt: -1 }); AccountSettings.upsert( { _id: 'accounts-allowEmailChange' }, { $setOnInsert: { booleanValue: false, sort: 0, }, }, ); AccountSettings.upsert( { _id: 'accounts-allowUserNameChange' }, { $setOnInsert: { booleanValue: false, sort: 1, }, }, ); AccountSettings.upsert( { _id: 'accounts-allowUserDelete' }, { $setOnInsert: { booleanValue: false, sort: 0, }, }, ); }); } AccountSettings.helpers({ allowEmailChange() { return AccountSettings.findOne('accounts-allowEmailChange').booleanValue; }, allowUserNameChange() { return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue; }, allowUserDelete() { return AccountSettings.findOne('accounts-allowUserDelete').booleanValue; }, }); export default AccountSettings;