diff --git a/src/components/LinkItems/Section.vue b/src/components/LinkItems/Section.vue index 4b78eec8..e77df8ab 100644 --- a/src/components/LinkItems/Section.vue +++ b/src/components/LinkItems/Section.vue @@ -8,7 +8,6 @@ :rows="displayData.rows" :color="displayData.color" :customStyles="displayData.customStyles" - v-if="isSectionVisibleToUser()" >
No Items to Show Yet @@ -52,7 +51,7 @@ import Item from '@/components/LinkItems/Item.vue'; import Collapsable from '@/components/LinkItems/Collapsable.vue'; import IframeModal from '@/components/LinkItems/IframeModal.vue'; -import { getCurrentUser, isLoggedInAsGuest } from '@/utils/Auth'; +// import { isSectionVisibleToUser } from '@/utils/ConfigHelpers'; export default { name: 'Section', @@ -87,9 +86,6 @@ export default { ? `grid-template-rows: repeat(${this.displayData.itemCountY}, 1fr);` : ''; return styles; }, - currentUser() { - return getCurrentUser(); - }, }, methods: { /* Returns a unique lowercase string, based on name, for section ID */ @@ -117,34 +113,9 @@ export default { return interval; }, /* Returns false if this section should not be rendered for the current user/ guest */ - isSectionVisibleToUser() { - const determineVisibility = (visibilityList, currentUser) => { - let isFound = false; - visibilityList.forEach((userInList) => { - if (userInList.toLowerCase() === currentUser) isFound = true; - }); - return isFound; - }; - const checkVisiblity = () => { - if (!this.currentUser) return true; - const hideFor = this.displayData.hideForUsers || []; - const currentUser = this.currentUser.user.toLowerCase(); - return !determineVisibility(hideFor, currentUser); - }; - const checkHiddenability = () => { - if (!this.currentUser) return true; - const currentUser = this.currentUser.user.toLowerCase(); - const showForUsers = this.displayData.showForUsers || []; - if (showForUsers.length < 1) return true; - return determineVisibility(showForUsers, currentUser); - }; - const checkIfHideForGuest = () => { - const hideForGuest = this.displayData.hideForGuests; - const isGuest = isLoggedInAsGuest(); - return !(hideForGuest && isGuest); - }; - return checkVisiblity() && checkHiddenability() && checkIfHideForGuest(); - }, + // isSectionVisibleToUser() { + // return isSectionVisibleToUser(this.displayData); + // }, }, }; diff --git a/src/utils/CheckSectionVisibility.js b/src/utils/CheckSectionVisibility.js new file mode 100644 index 00000000..55b78954 --- /dev/null +++ b/src/utils/CheckSectionVisibility.js @@ -0,0 +1,64 @@ +/** + * 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 filterSectionVisibility = (sections) => { + const currentUser = getCurrentUser(); // Get current user object + const isGuest = isLoggedInAsGuest(); // Check if current user is a guest + // const sectionsToReturn = []; + // sections.forEach((currentSection) => { + // const displayData = currentSection.displayData || {}; + // if (isSectionVisibleToUser(displayData, currentUser, isGuest)) { + // sectionsToReturn.push(currentSection); + // } + // }); + + const filteredSections = sections.filter((currentSection) => { + const displayData = currentSection.displayData || {}; + return isSectionVisibleToUser(displayData, currentUser, isGuest); + }); + + return filteredSections; +}; + +export default filterSectionVisibility; diff --git a/src/utils/ConfigHelpers.js b/src/utils/ConfigHelpers.js index d282c297..381a9c0f 100644 --- a/src/utils/ConfigHelpers.js +++ b/src/utils/ConfigHelpers.js @@ -1,4 +1,5 @@ import ConfigAccumulator from '@/utils/ConfigAccumalator'; +import filterUserSections from '@/utils/CheckSectionVisibility'; import { languages } from '@/utils/languages'; import { visibleComponents, @@ -13,7 +14,12 @@ import { */ export const config = (() => { const Accumulator = new ConfigAccumulator(); - return Accumulator.config(); + // return Accumulator.config(); + return { + appConfig: Accumulator.appConfig(), + pageInfo: Accumulator.pageInfo(), + sections: filterUserSections(Accumulator.sections()), + }; })(); /**