accountSettings.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. AccountSettings = new Mongo.Collection('accountSettings');
  2. AccountSettings.attachSchema(
  3. new SimpleSchema({
  4. _id: {
  5. type: String,
  6. },
  7. booleanValue: {
  8. type: Boolean,
  9. optional: true,
  10. },
  11. sort: {
  12. type: Number,
  13. decimal: true,
  14. },
  15. createdAt: {
  16. type: Date,
  17. optional: true,
  18. // eslint-disable-next-line consistent-return
  19. autoValue() {
  20. if (this.isInsert) {
  21. return new Date();
  22. } else {
  23. this.unset();
  24. }
  25. },
  26. },
  27. modifiedAt: {
  28. type: Date,
  29. denyUpdate: false,
  30. // eslint-disable-next-line consistent-return
  31. autoValue() {
  32. if (this.isInsert || this.isUpsert || this.isUpdate) {
  33. return new Date();
  34. } else {
  35. this.unset();
  36. }
  37. },
  38. },
  39. })
  40. );
  41. AccountSettings.allow({
  42. update(userId) {
  43. const user = Users.findOne(userId);
  44. return user && user.isAdmin;
  45. },
  46. });
  47. AccountSettings.before.update((userId, doc, fieldNames, modifier, options) => {
  48. modifier.$set = modifier.$set || {};
  49. modifier.$set.modifiedAt = Date.now();
  50. });
  51. if (Meteor.isServer) {
  52. Meteor.startup(() => {
  53. AccountSettings._collection._ensureIndex({ modifiedAt: -1 });
  54. AccountSettings.upsert(
  55. { _id: 'accounts-allowEmailChange' },
  56. {
  57. $setOnInsert: {
  58. booleanValue: false,
  59. sort: 0,
  60. },
  61. }
  62. );
  63. AccountSettings.upsert(
  64. { _id: 'accounts-allowUserNameChange' },
  65. {
  66. $setOnInsert: {
  67. booleanValue: false,
  68. sort: 1,
  69. },
  70. }
  71. );
  72. });
  73. }
  74. export default AccountSettings;