Add admin ability : Impersonate one user.

This commit is contained in:
Guillaume 2020-09-16 18:11:19 +00:00
parent 8f6c3550e3
commit d19cc972e0
5 changed files with 859 additions and 821 deletions

View file

@ -104,6 +104,8 @@ template(name="peopleRow")
a.edit-user a.edit-user
i.fa.fa-edit i.fa.fa-edit
| {{_ 'edit'}} | {{_ 'edit'}}
a.more-settings-user
i.fa.fa-ellipsis-h
template(name="editUserPopup") template(name="editUserPopup")
form form
@ -200,3 +202,10 @@ template(name="newUserPopup")
input.js-profile-password(type="password") input.js-profile-password(type="password")
div.buttonsContainer div.buttonsContainer
input.primary.wide(type="submit" value="{{_ 'save'}}") input.primary.wide(type="submit" value="{{_ 'save'}}")
template(name="settingsUserPopup")
ul.pop-over-list
li
a.impersonate-user
i.fa.fa-user
| {{_ 'impersonate-user'}}

View file

@ -194,6 +194,7 @@ BlazeComponent.extendComponent({
return [ return [
{ {
'click a.edit-user': Popup.open('editUser'), 'click a.edit-user': Popup.open('editUser'),
'click a.more-settings-user': Popup.open('settingsUser'),
}, },
]; ];
}, },
@ -343,3 +344,16 @@ Template.newUserPopup.events({
Popup.close(); Popup.close();
}, },
}); });
Template.settingsUserPopup.events({
'click .impersonate-user'(event) {
event.preventDefault();
Meteor.call('impersonate', this.userId, err => {
if (!err) {
FlowRouter.go('/');
Meteor.connection.setUserId(this.userId);
}
});
},
});

View file

@ -46,3 +46,6 @@ table
div div
margin: auto margin: auto
.more-settings-user
margin-left: 10px;

File diff suppressed because it is too large Load diff

View file

@ -905,6 +905,16 @@ if (Meteor.isServer) {
} }
return { username: user.username, email: user.emails[0].address }; return { username: user.username, email: user.emails[0].address };
}, },
impersonate(userId) {
check(userId, String);
if (!Meteor.users.findOne(userId))
throw new Meteor.Error(404, 'User not found');
if (!Meteor.user().isAdmin)
throw new Meteor.Error(403, 'Permission denied');
this.setUserId(userId);
},
}); });
Accounts.onCreateUser((options, user) => { Accounts.onCreateUser((options, user) => {
const userCount = Users.find().count(); const userCount = Users.find().count();