Initial commit
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <[email protected]>
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||
*/
|
||||
|
||||
import { create } from 'zustand';
|
||||
|
||||
type Edition = 'enterprise' | 'community' | 'oss';
|
||||
|
||||
interface AccountState {
|
||||
permissions: string[];
|
||||
edition: Edition;
|
||||
locale: string;
|
||||
|
||||
setAccountInfo: (permissions: string[], edition: Edition, locale: string) => void;
|
||||
hasPermission: (perm: string) => boolean;
|
||||
hasObjectPermission: (prefix: string, action: 'Get' | 'Query' | 'Create' | 'Update' | 'Destroy') => boolean;
|
||||
}
|
||||
|
||||
export const useAccountStore = create<AccountState>()((set, get) => ({
|
||||
permissions: [],
|
||||
edition: 'community',
|
||||
locale: 'en',
|
||||
|
||||
setAccountInfo: (permissions, edition, locale) => {
|
||||
set({ permissions, edition, locale });
|
||||
},
|
||||
|
||||
hasPermission: (perm) => {
|
||||
return get().permissions.includes(perm);
|
||||
},
|
||||
|
||||
hasObjectPermission: (prefix, action) => {
|
||||
return get().permissions.includes(`${prefix}${action}`);
|
||||
},
|
||||
}));
|
||||
Reference in New Issue
Block a user