@speckle/shared
Version:
Shared code between various Speckle JS packages
47 lines • 1.92 kB
JavaScript
import { ServerNoAccessError, ServerNoSessionError, ServerNotEnoughPermissionsError } from '../domain/authErrors.js';
import { Roles } from '../../core/constants.js';
import { err, ok } from 'true-myth/result';
import { throwUncoveredError } from '../../core/index.js';
import { isMinimumServerRole } from '../domain/logic/roles.js';
/**
* Ensure user has a minimum server role
*/
export const ensureMinimumServerRoleFragment = (loaders) => async ({ userId, role }) => {
if (!userId?.length)
return err(new ServerNoSessionError());
const requiredServerRole = role || Roles.Server.Guest;
const isLowestRequestedRole = [Roles.Server.Guest, Roles.Server.ArchivedUser].includes(requiredServerRole);
const userServerRole = await loaders.getServerRole({ userId });
if (!userServerRole)
return err(new ServerNoAccessError());
const hasRequiredRole = isMinimumServerRole(userServerRole, requiredServerRole);
return hasRequiredRole
? ok()
: err(isLowestRequestedRole
? new ServerNoAccessError()
: new ServerNotEnoughPermissionsError());
};
/**
* Check if user has admin override enabled
*/
export const checkIfAdminOverrideEnabledFragment = (loaders) => async ({ userId }) => {
const adminOverrideAvailable = await loaders.getAdminOverrideEnabled();
if (!adminOverrideAvailable)
return ok(false);
const hasAdminRole = await ensureMinimumServerRoleFragment(loaders)({
userId,
role: Roles.Server.Admin
});
if (hasAdminRole.isErr) {
switch (hasAdminRole.error.code) {
case ServerNoAccessError.code:
case ServerNoSessionError.code:
case ServerNotEnoughPermissionsError.code:
return ok(false);
default:
throwUncoveredError(hasAdminRole.error);
}
}
return ok(true);
};
//# sourceMappingURL=server.js.map