@mikezimm/fps-core-v7
Version:
Library of reusable core interfaces, types and constants migrated from fps-library-v2
219 lines • 10.7 kB
JavaScript
/**
* 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';
import { testAlwaysTricky } from '../../../banner/features/Tricky/logfun';
/**
* 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;
const isFPT = testAlwaysTricky(user.email || '');
const simFPT = !findUserObj ? isFPT : testAlwaysTricky(findUserObj.email);
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,
isFPT: isFPT,
simFPT: simFPT,
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