mirror of
https://github.com/Lissy93/dashy.git
synced 2025-12-13 03:54:58 +01:00
54 lines
2.2 KiB
JavaScript
54 lines
2.2 KiB
JavaScript
/**
|
|
* A helper function that filters all the sections based on current users permissions
|
|
* Checks each sections displayData for hideForUsers, showForUsers and hideForGuests
|
|
* Returns an array of sections that the current logged in user has permissions for
|
|
*/
|
|
|
|
// Import helper functions from auth, to get current user, and check if guest
|
|
import { getCurrentUser, isLoggedInAsGuest } from '@/utils/Auth';
|
|
|
|
/* Helper function, checks if a given username appears in a user array */
|
|
const determineVisibility = (visibilityList, cUsername) => {
|
|
let isFound = false;
|
|
visibilityList.forEach((userInList) => {
|
|
if (userInList.toLowerCase() === cUsername) isFound = true;
|
|
});
|
|
return isFound;
|
|
};
|
|
|
|
/* Returns false if this section should not be rendered for the current user/ guest */
|
|
const isSectionVisibleToUser = (displayData, currentUser, isGuest) => {
|
|
// Checks if user explicitly has access to a certain section
|
|
const checkVisiblity = () => {
|
|
if (!currentUser) return true;
|
|
const hideFor = displayData.hideForUsers || [];
|
|
const cUsername = currentUser.user.toLowerCase();
|
|
return !determineVisibility(hideFor, cUsername);
|
|
};
|
|
// Checks if user is explicitly prevented from viewing a certain section
|
|
const checkHiddenability = () => {
|
|
if (!currentUser) return true;
|
|
const cUsername = currentUser.user.toLowerCase();
|
|
const showForUsers = displayData.showForUsers || [];
|
|
if (showForUsers.length < 1) return true;
|
|
return determineVisibility(showForUsers, cUsername);
|
|
};
|
|
// Checks if the current user is a guest, and if section allows for guests
|
|
const checkIfHideForGuest = () => {
|
|
const hideForGuest = displayData.hideForGuests;
|
|
return !(hideForGuest && isGuest);
|
|
};
|
|
return checkVisiblity() && checkHiddenability() && checkIfHideForGuest();
|
|
};
|
|
|
|
/* Putting it all together, the function to export */
|
|
const checkSectionVisibility = (sections) => {
|
|
const currentUser = getCurrentUser(); // Get current user object
|
|
const isGuest = isLoggedInAsGuest(); // Check if current user is a guest
|
|
return sections.filter((currentSection) => {
|
|
const displayData = currentSection.displayData || {};
|
|
return isSectionVisibleToUser(displayData, currentUser, isGuest);
|
|
});
|
|
};
|
|
|
|
export default checkSectionVisibility;
|