|
@@ -238,6 +238,19 @@ Users.allow({
|
|
const user = Users.findOne(userId);
|
|
const user = Users.findOne(userId);
|
|
return user && Meteor.user().isAdmin;
|
|
return user && Meteor.user().isAdmin;
|
|
},
|
|
},
|
|
|
|
+ remove(userId, doc) {
|
|
|
|
+ const adminsNumber = Users.find({ isAdmin: true }).count();
|
|
|
|
+ const { isAdmin } = Users.findOne({ _id: userId }, { fields: { 'isAdmin': 1 } });
|
|
|
|
+
|
|
|
|
+ // Prevents remove of the only one administrator
|
|
|
|
+ if (adminsNumber === 1 && isAdmin && userId === doc._id) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // If it's the user or an admin
|
|
|
|
+ return userId === doc._id || isAdmin;
|
|
|
|
+ },
|
|
|
|
+ fetch: [],
|
|
});
|
|
});
|
|
|
|
|
|
// Search a user in the complete server database by its name or username. This
|
|
// Search a user in the complete server database by its name or username. This
|
|
@@ -364,6 +377,10 @@ Users.helpers({
|
|
getTemplatesBoardSlug() {
|
|
getTemplatesBoardSlug() {
|
|
return (Boards.findOne((this.profile || {}).templatesBoardId) || {}).slug;
|
|
return (Boards.findOne((this.profile || {}).templatesBoardId) || {}).slug;
|
|
},
|
|
},
|
|
|
|
+
|
|
|
|
+ remove() {
|
|
|
|
+ User.remove({ _id: this._id});
|
|
|
|
+ },
|
|
});
|
|
});
|
|
|
|
|
|
Users.mutations({
|
|
Users.mutations({
|
|
@@ -673,6 +690,23 @@ if (Meteor.isServer) {
|
|
}, {unique: true});
|
|
}, {unique: true});
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ // OLD WAY THIS CODE DID WORK: When user is last admin of board,
|
|
|
|
+ // if admin is removed, board is removed.
|
|
|
|
+ // NOW THIS IS COMMENTED OUT, because other board users still need to be able
|
|
|
|
+ // to use that board, and not have board deleted.
|
|
|
|
+ // Someone can be later changed to be admin of board, by making change to database.
|
|
|
|
+ // TODO: Add UI for changing someone as board admin.
|
|
|
|
+ //Users.before.remove((userId, doc) => {
|
|
|
|
+ // Boards
|
|
|
|
+ // .find({members: {$elemMatch: {userId: doc._id, isAdmin: true}}})
|
|
|
|
+ // .forEach((board) => {
|
|
|
|
+ // // If only one admin for the board
|
|
|
|
+ // if (board.members.filter((e) => e.isAdmin).length === 1) {
|
|
|
|
+ // Boards.remove(board._id);
|
|
|
|
+ // }
|
|
|
|
+ // });
|
|
|
|
+ //});
|
|
|
|
+
|
|
// Each board document contains the de-normalized number of users that have
|
|
// Each board document contains the de-normalized number of users that have
|
|
// starred it. If the user star or unstar a board, we need to update this
|
|
// starred it. If the user star or unstar a board, we need to update this
|
|
// counter.
|
|
// counter.
|