Initial commit MKD fixes
This commit is contained in:
34
contexts/PermissionsContext.tsx
Executable file
34
contexts/PermissionsContext.tsx
Executable file
@@ -0,0 +1,34 @@
|
||||
import React, { createContext, useContext, useMemo } from 'react';
|
||||
import { canEditSub, canReadSub, isScopeOwn } from '../constants/permissions';
|
||||
|
||||
interface PermissionsContextValue {
|
||||
permissions: string[] | null;
|
||||
}
|
||||
|
||||
const PermissionsContext = createContext<PermissionsContextValue>({ permissions: null });
|
||||
|
||||
export const PermissionsProvider: React.FC<{ permissions: string[] | null; children: React.ReactNode }> = ({
|
||||
permissions,
|
||||
children,
|
||||
}) => {
|
||||
const value = useMemo(() => ({ permissions }), [permissions]);
|
||||
return <PermissionsContext.Provider value={value}>{children}</PermissionsContext.Provider>;
|
||||
};
|
||||
|
||||
export function usePermissions() {
|
||||
return useContext(PermissionsContext);
|
||||
}
|
||||
|
||||
/** Права на подраздел: можно ли читать, редактировать, только своё */
|
||||
export function useSubPermission(section: string, subId: string) {
|
||||
const { permissions } = usePermissions();
|
||||
const list = permissions ?? [];
|
||||
return useMemo(
|
||||
() => ({
|
||||
canRead: canReadSub(list, section, subId),
|
||||
canEdit: canEditSub(list, section, subId),
|
||||
scopeOwn: isScopeOwn(list, section, subId),
|
||||
}),
|
||||
[list, section, subId]
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user