| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import {
- db,
- READ_PREFERENCE_SECONDARY,
- } from '../app/src/infrastructure/mongodb.js'
- import UserSessionsManager from '../app/src/Features/User/UserSessionsManager.js'
- import { scriptRunner } from './lib/ScriptRunner.mjs'
- const COMMIT = process.argv.includes('--commit')
- const KEEP_SESSIONS = process.argv.includes('--keep-sessions')
- const FULL_STAFF_ACCESS = {
- publisherMetrics: true,
- publisherManagement: true,
- institutionMetrics: true,
- institutionManagement: true,
- groupMetrics: true,
- groupManagement: true,
- adminMetrics: true,
- splitTestMetrics: true,
- splitTestManagement: true,
- }
- function doesNotHaveFullStaffAccess(user) {
- if (!user.staffAccess) {
- return true
- }
- for (const field of Object.keys(FULL_STAFF_ACCESS)) {
- if (!user.staffAccess[field]) {
- return true
- }
- }
- return false
- }
- function formatUser(user) {
- user = Object.assign({}, user, user.staffAccess)
- delete user.staffAccess
- return user
- }
- async function main() {
- const adminUsers = await db.users
- .find(
- { isAdmin: true },
- {
- projection: {
- _id: 1,
- email: 1,
- staffAccess: 1,
- },
- readPreference: READ_PREFERENCE_SECONDARY,
- }
- )
- .toArray()
- console.log('All Admin users:')
- console.table(adminUsers.map(formatUser))
- const incompleteUsers = adminUsers.filter(doesNotHaveFullStaffAccess)
- if (incompleteUsers.length === 0) {
- console.warn('All Admin users have full staff access.')
- return
- }
- console.log()
- console.log('Incomplete staff access:')
- console.table(incompleteUsers.map(formatUser))
- if (COMMIT) {
- for (const user of incompleteUsers) {
- console.error(
- `Granting ${user.email} (${user._id.toString()}) full staff access`
- )
- await db.users.updateOne(
- { _id: user._id, isAdmin: true },
- { $set: { staffAccess: FULL_STAFF_ACCESS } }
- )
- if (!KEEP_SESSIONS) {
- await UserSessionsManager.promises.removeSessionsFromRedis(user)
- }
- }
- } else {
- console.warn('Use --commit to grant missing staff access.')
- }
- }
- try {
- await scriptRunner(main)
- console.error('Done.')
- process.exit(0)
- } catch (error) {
- console.error({ error })
- process.exit(1)
- }
|