mirror of https://github.com/wg-easy/wg-easy
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
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 });
|
|
});
|
|
};
|
|
|