You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

27 lines
784 B

import type { EventHandlerRequest, EventHandlerResponse, H3Event } from 'h3';
import type { UserType } from '#db/repositories/user/types';
type PermissionHandler<
TReq extends EventHandlerRequest,
TRes extends EventHandlerResponse,
> = { (params: { event: H3Event<TReq>; user: UserType }): TRes };
export const definePermissionEventHandler = <
TReq extends EventHandlerRequest,
TRes extends EventHandlerResponse,
>(
action: Action,
handler: PermissionHandler<TReq, TRes>
) => {
return defineEventHandler(async (event) => {
const user = await getCurrentUser(event);
if (!checkPermissions(action, user)) {
throw createError({
statusCode: 403,
statusMessage: 'Forbidden',
});
}
return await handler({ event, user });
});
};