Let admins impersonate other users
meteor add gwendall:impersonate
Impersonate
Set a [data-impersonate] attribute with the id of the user to impersonate on a DOM element.
<button data-impersonate="{{someUser._id}}">Click to impersonate</button>
Un-impersonate
Set a [data-unimpersonate] attribute to a DOM element.
<button data-unimpersonate>Click to unimpersonate</button>
isImpersonating
{{#if isImpersonating}}
<button data-unimpersonate>Click to unimpersonate</button>
{{else}}
<button data-impersonate="{{_id}}">Click to impersonate</button>
{{/if}}
Should you need to use callbacks, use the JS methods directly.
Impersonate.do(userId, callback)
var userId = "...";
Impersonate.do(userId, function(err, userId) {
if (err) return;
console.log("You are now impersonating user #" + userId);
});
Impersonate.undo(callback)
Impersonate.undo(function(err, userId) {
if (err) return;
console.log("Impersonating no more, welcome back #" + userId);
})
By default, the package will grant users in the "admins" group (through alanning:roles) the possibility to impersonate other users. You can also set any of the two following parameters to define your own impersonation roles.
- User role
Impersonate.admins = ["masters", "bosses"];
- User group
Impersonate.adminGroups = [
{ role: "masters", group: "group_A" },
{ role: "bosses", group: "group_B" }
];
- Uses alanning:roles. If the user trying to impersonate is not an admin, a server error will be returned.
- The package creates a "_impersonateToken" property on the impersonating admins' documents. Make sure not to send this property to other users than the admin themselves, as it would offer the possibility to those other users to impersonate too.
- Built upon David Weldon's post