Home Reference Source

src/lib/protectFields.js

// @flow

import { dummyUserContext } from './dummyUserContext';

/**
 * Protects a field based on authorizations
 * @public
 * @param {object} me - current user
 * @param {array} authorizedUserRoles - userRoles with authorization
 * @param {array} protectedFields - list of fields only for these userRoles
 * @param {object} inputObject - document with might contain those fields
 * @param {object} User - model context for type User
 * @return {object} result - document with or without the protected fields
 */

export function protectFields(
  me: any = {},
  authorizedUserRoles: Array<string> = [],
  protectedFields: Array<string> = [],
  inputObject: any = {},
  { User } = { User: dummyUserContext }
): any {
  // pure function
  const result = Object.assign({}, inputObject);

  // getting role of current User
  const role = User.authRole(me);

  // if user is not allowed to access specific fields,
  // remove field from object...
  if (!authorizedUserRoles.includes(role)) {
    protectedFields.forEach(protectedField => {
      if (result[protectedField]) {
        delete result[protectedField];
      }
    });
  }

  return result;
}