mirror of
https://gitlab.com/bramw/baserow.git
synced 2024-11-08 09:36:58 +00:00
37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
import UserService from '@baserow_premium/services/admin/users'
|
|
|
|
/**
|
|
* We only want to allow impersonation when a page loads for the first time because
|
|
* on first load several endpoints are called to fetch initial data like workspace,
|
|
* applications, etc. Starting the impersonation when the page first loads, makes
|
|
* sure that we never have to take this situation into account because it only
|
|
* happens on first page load before everything is fetched.
|
|
*/
|
|
export default async function ({ store, req, app, route }) {
|
|
if (!req) return
|
|
|
|
// If the query param is not provided, we don't want to do anything.
|
|
if (
|
|
!Object.prototype.hasOwnProperty.call(route.query, '__impersonate-user')
|
|
) {
|
|
return
|
|
}
|
|
|
|
const userId = route.query['__impersonate-user']
|
|
|
|
// Request the impersonate user data, this contains the `token` and `user` object.
|
|
// This is needed to impersonate the user.
|
|
const { data } = await UserService(app.$client).impersonate(userId)
|
|
|
|
// Override the existing user data based on the response of the impersonate endpoint.
|
|
store.dispatch('auth/forceSetUserData', data)
|
|
|
|
// Make sure that the auth doesn't override the JWT token cookie because we want
|
|
// the admin one to persist.
|
|
store.dispatch('auth/preventSetToken')
|
|
|
|
// Set the impersonating state to true so that the warning in the top left corner
|
|
// is visible.
|
|
store.dispatch('impersonating/setImpersonating', true)
|
|
}
|