UNPKG

@datalayer/core

Version:
125 lines (124 loc) 4.85 kB
/* * Copyright (c) 2023-2025 Datalayer, Inc. * Distributed under the terms of the Modified BSD License. */ import { useLocation } from "react-router-dom"; import { PlatformRoles, OrganizationRoles, TeamRoles } from '../models'; import useNavigate from "./useNavigate"; export const useAuthorization = () => { const navigate = useNavigate(); const location = useLocation(); const goToApplicationStateError = (message) => { console.warn(message); console.log("Application error while navigating to ", location); console.trace(); navigate('/error/application/state'); }; // Account ------------------------------------------------------------------- const checkUserAccountPermissions = (user, accountHandle) => { if (user.handle !== accountHandle) { goToApplicationStateError(`Permissions check failed for account handle: ${accountHandle} and user: ${user}`); } }; // Platform ------------------------------------------------------------------- const checkIsPlatformAdmin = (user) => { return user.roles.includes(PlatformRoles.Admin.handle); }; const checkIsPlatformGrowthManager = (user) => { return user.roles.includes(PlatformRoles.GrowthManager.handle); }; const checkIsPlatformSuccessManager = (user) => { return user.roles.includes(PlatformRoles.SuccessManager.handle); }; const checkIsPlatformMember = (user) => { return user.roles.includes(PlatformRoles.Member.handle); }; const checkIsPlatformFeaturesPreviewer = (user) => { return user.roles.includes(PlatformRoles.FeaturesPreviewer.handle); }; const checkIsPlatformUsageReviewer = (user) => { return user.roles.includes(PlatformRoles.UsageReviewer.handle); }; // Organization ------------------------------------------------------------------- const checkUserIsOrganizationOwner = (user, organization) => { for (let i = 0; i < organization.members.length; i++) { if (organization.members[i].id === user.id) { if (checkIsOrganizationOwner(organization.members[i])) { return true; } } } return false; }; const checkIsOrganizationOwner = (member) => { return member.roles.includes(OrganizationRoles.Owner.handle); }; const checkIsOrganizationMember = (user, organization) => { for (let i = 0; i < organization.members.length; i++) { if (organization.members[i].id === user.id) { return true; } } return false; }; const checkOrganizationsMembership = (organizationHandle, organizations) => { if (organizations) { let isAllowed = false; for (let i = 0; i < organizations.length; i++) { if (organizationHandle === organizations[i].handle) { isAllowed = true; break; } } if (!isAllowed) { goToApplicationStateError(`Check organizations membership fails for organization handle: ${organizationHandle} and organizations: ${organizations}`); } } }; // Team ------------------------------------------------------------------- const checkUserIsTeamOwer = (user, team) => { for (let i = 0; i < team.members.length; i++) { if (team.members[i].id === user.id) { if (checkIsTeamOwer(team.members[i])) { return true; } } } return false; }; const checkIsTeamOwer = (member) => { return member.roles.includes(TeamRoles.Owner.handle); }; const checkIsTeamMember = (user, team) => { for (let i = 0; i < team.members.length; i++) { if (team.members[i].id === user.id) { return true; } } return false; }; // Course ------------------------------------------------------------------- const checkIsCourseStudent = (user, course) => { // TODO Implement this. return false; }; // -------------------------------------------------------------------------- return { checkIsCourseStudent, checkIsOrganizationMember, checkUserIsOrganizationOwner, checkIsPlatformAdmin, checkIsPlatformFeaturesPreviewer, checkIsPlatformGrowthManager, checkIsPlatformMember, checkIsPlatformSuccessManager, checkIsPlatformUsageReviewer, checkIsTeamMember, checkIsTeamOwer, checkOrganizationsMembership, checkUserAccountPermissions, checkIsOrganizationOwner, checkUserIsTeamOwer, }; }; export default useAuthorization;