UNPKG

@mikezimm/fps-core-v7

Version:

Library of reusable core interfaces, types and constants migrated from fps-library-v2

214 lines 10.4 kB
/** * 2024-09-06: Migrated from fps-library-v2\src\logic\Users\ */ import { checkDeepProperty } from '../../../logic/Objects/deep'; import { check4This, Check4 } from '../../../logic/Links/CheckSearch'; import { check4Tricks } from '../../../banner/FPSWebPartClass/functions/showTricks'; /** * Sets thisWindow.FPSUser = FPSUser; and then returns FPSUser * @param context * @param trickyEmailsAll * @param trickyApp * @returns * * * 2022-11-30: in npmFunctions was context: WebPartContext, */ // export function getFPSUser ( context: any, trickyEmails: string[], trickyApp: string ): IFPSUser { // 2022-11-30: in npmFunctions was context: WebPartContext, added SPPermission as input because I am not bringing in the context // import { SPPermission, } from '@microsoft/sp-page-context'; export function getFPSUser(context, trickyEmailsAll, trickyApp, SPPermission) { const thisWindow = window; const { user, web } = context.pageContext; const startTime = new Date(); // VVV https://github.com/mikezimm/fps-library-v2/issues/187 const urlParameters = new URLSearchParams(window.location.search); // Should be this syntax: simulateUser={"email":"fake.email@me.com"} const findUser = urlParameters.get('simulateUser'); let findUserObj = null; if (findUser) { try { const temp = { email: "random.user@me.com", title: "Random User" }; const fulc = findUser.toLocaleLowerCase(); if (fulc.indexOf('read') === 0) { findUserObj = { ...temp, simple: "Reader", }; } else if (fulc.indexOf('edit') === 0) { findUserObj = { ...temp, simple: "Editor", }; } else if (fulc.indexOf('design') === 0) { findUserObj = { ...temp, simple: "Designer", }; } else if (fulc.indexOf('approve') === 0) { findUserObj = { ...temp, simple: "Approver", }; } else if (fulc === 'FullControl' || fulc === 'owner') { findUserObj = { ...temp, simple: "FullControl", }; } else if (fulc.indexOf('contrib') === 0) { findUserObj = { ...temp, simple: "Contributor", }; } else if (fulc === 'admin') { findUserObj = { ...temp, simple: "Admin", }; } else if (fulc === 'sharepoint') { findUserObj = { ...temp, simple: "SharePoint", }; } else if (findUser.indexOf('{') !== 0) { alert(`simulateUser needs to be an object starting with {. This does not!\n\n${findUser}`); findUserObj = { ...temp, simple: "Reader", }; } else { findUserObj = JSON.parse(findUser); } if (findUserObj.email) { if (!findUserObj.Email) findUserObj.Email = findUserObj.email; if (!findUserObj.Name) findUserObj.Name = findUserObj.email; if (!findUserObj.name) findUserObj.name = findUserObj.email; if (!findUserObj.loginName) findUserObj.loginName = findUserObj.email; } else if (findUserObj.name) { if (!findUserObj.Name) findUserObj.Name = findUserObj.name; if (!findUserObj.email) findUserObj.email = findUserObj.name; if (!findUserObj.Email) findUserObj.Email = findUserObj.name; if (!findUserObj.loginName) findUserObj.loginName = findUserObj.email; } if (findUserObj.Title) { if (!findUserObj.title) findUserObj.title = findUserObj.Title; if (!findUserObj.displayName) findUserObj.displayName = findUserObj.Title; } else if (findUserObj.title) { if (!findUserObj.Title) findUserObj.Title = findUserObj.title; if (!findUserObj.displayName) findUserObj.displayName = findUserObj.title; } } catch (e) { console.log('simulateUser IS NOT AN OBJECT', findUser); } } // ^^^ https://github.com/mikezimm/fps-library-v2/issues/187 const currentCultureName = checkDeepProperty(context.pageContext, ['cultureInfo', 'currentCultureName'], 'ShortError'); let isSiteAdmin = checkDeepProperty(context.pageContext, ['legacyPageContext', 'isSiteAdmin'], 'ShortError'); if (findUserObj && (findUserObj.isSiteAdmin === true || findUserObj.isSiteAdmin === false)) isSiteAdmin = findUserObj.isSiteAdmin; if (isSiteAdmin !== true && isSiteAdmin !== false) { isSiteAdmin = false; } let useUser = findUserObj ? { ...user, ...findUserObj } : user; if (check4This(Check4.fpsInitRender_Eq_true, false) === true) console.log('getFPSUser useUser', useUser); const showTricks = check4Tricks(trickyEmailsAll, useUser); if (thisWindow.FPSUser) { if (showTricks === true && thisWindow.FPSUser.trickyApps.indexOf(trickyApp) < 0) { thisWindow.FPSUser.trickyApps.push(trickyApp); } return thisWindow.FPSUser; } else { const userAny = useUser; //Cast as any where needed... unsure where I got some of these props not on SPUser... const userId = typeof context.pageContext.legacyPageContext.userId === 'number' ? context.pageContext.legacyPageContext.userId : parseInt(context.pageContext.legacyPageContext.userId); const userTitle = useUser.displayName ? useUser.displayName : userAny.title ? userAny.title : userAny.Title ? userAny.Title : 'Unknown User'; const useName = userAny.Name ? userAny.Name : userAny.LoginName ? userAny.LoginName : useUser.loginName; let FPSUser = { title: userTitle, Title: userTitle, id: userId.toString(), ID: userId, Id: userId, // Added variations for more compatibility downstream email: useUser.email, Email: useUser.email, name: useName, Name: useName, LoginName: useName, loginName: useName, currentCultureName: currentCultureName, imageUrl: userAny.imageUrl, trickyApps: showTricks === true ? [trickyApp] : [], PrincipalType: userAny.PrincipalType ? userAny.PrincipalType : null, isSiteAdmin: isSiteAdmin, isGuest: useUser.isExternalGuestUser, manageWeb: web.permissions.hasPermission(SPPermission.manageWeb), isSiteOwner: web.permissions.hasPermission(SPPermission.manageWeb), managePermissions: web.permissions.hasPermission(SPPermission.managePermissions), enumeratePermissions: web.permissions.hasPermission(SPPermission.enumeratePermissions), addAndCustomizePages: web.permissions.hasPermission(SPPermission.addAndCustomizePages), manageLists: web.permissions.hasPermission(SPPermission.manageLists), approveItems: web.permissions.hasPermission(SPPermission.approveItems), editListItems: web.permissions.hasPermission(SPPermission.editListItems), openItems: web.permissions.hasPermission(SPPermission.openItems), simple: useUser.simple ? useUser.simple : 'None', crunchTime: -1, }; if (findUserObj) FPSUser = { ...FPSUser, ...findUserObj }; // Set simple to one of these to over-ride behaviour //'SharePoint' | 'Admin' | 'FullControl' | 'Designer' | 'Editor' | 'Approver' | 'Contributor' | 'Reader' | 'None'; if (FPSUser.simple === 'None') { let simple = 'None'; if (showTricks === true) { simple = 'SharePoint'; } else if (FPSUser.isSiteAdmin === true) { simple = 'Admin'; } else if (FPSUser.manageWeb === true) { simple = 'FullControl'; } else if (FPSUser.addAndCustomizePages === true) { simple = 'Designer'; } else if (FPSUser.manageLists === true) { simple = 'Editor'; } else if (FPSUser.approveItems === true) { simple = 'Approver'; } else if (FPSUser.editListItems === true) { simple = 'Contributor'; } else if (FPSUser.openItems === true) { simple = 'Reader'; } else { simple = 'None'; } FPSUser.simple = simple; } else { // simple was preset, so figure it out and reverse engineer the permission levels based on it const values = ['SharePoint', 'Admin', 'FullControl', 'Designer', 'Editor', 'Approver', 'Contributor', 'Reader', 'None']; const idx = values.indexOf(FPSUser.simple); if (idx > -1) { FPSUser.isSiteAdmin = idx < 2 ? true : false; FPSUser.manageWeb = idx < 3 ? true : false; FPSUser.isSiteOwner = idx < 3 ? true : false; FPSUser.managePermissions = idx < 3 ? true : false; FPSUser.enumeratePermissions = idx < 3 ? true : false; FPSUser.addAndCustomizePages = idx < 4 ? true : false; FPSUser.manageLists = idx < 5 ? true : false; FPSUser.approveItems = idx < 6 ? true : false; FPSUser.editListItems = idx < 7 ? true : false; FPSUser.openItems = idx < 8 ? true : false; } } const endTime = new Date(); const totalTime = endTime.getTime() - startTime.getTime(); FPSUser.crunchTime = totalTime; // console.log('PermissionCheck Time:', totalTime ); thisWindow.FPSUser = FPSUser; return FPSUser; } } //# sourceMappingURL=FPSUser.js.map