Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/resources/scripts/plugins/usePermissions.ts
7458 views
1
import { ServerContext } from '@/state/server';
2
import { useDeepCompareMemo } from '@/plugins/useDeepCompareMemo';
3
4
export const usePermissions = (action: string | string[]): boolean[] => {
5
const userPermissions = ServerContext.useStoreState((state) => state.server.permissions);
6
7
return useDeepCompareMemo(() => {
8
if (userPermissions[0] === '*') {
9
return Array(Array.isArray(action) ? action.length : 1).fill(true);
10
}
11
12
return (Array.isArray(action) ? action : [action]).map(
13
(permission) =>
14
// Allows checking for any permission matching a name, for example files.*
15
// will return if the user has any permission under the file.XYZ namespace.
16
(permission.endsWith('.*') &&
17
userPermissions.filter((p) => p.startsWith(permission.split('.')[0])).length > 0) ||
18
// Otherwise just check if the entire permission exists in the array or not.
19
userPermissions.indexOf(permission) >= 0
20
);
21
}, [action, userPermissions]);
22
};
23
24