Spaces:
Paused
Paused
Download apps/api/src/core/guards.js from nenbuj/we-superapp: direct link, hf CLI and curl.
- Browser
- Download file 1.12 kB
-
https://huggingface.co/spaces/nenbuj/we-superapp/resolve/main/apps/api/src/core/guards.js
- Command line
-
hf download hf://spaces/nenbuj/we-superapp/apps/api/src/core/guards.js
-
curl -L -o guards.js https://huggingface.co/spaces/nenbuj/we-superapp/resolve/main/apps/api/src/core/guards.js
1.12 kB
| // Ядро: проверка членства в пространстве. Ведёт Claude. | |
| // Кодекс вызывает: await requireMember(request, spaceId) в начале каждого модульного хендлера. | |
| import { db } from './db.js'; | |
| class HttpError extends Error { | |
| constructor(status, code, message) { | |
| super(message); | |
| this.status = status; | |
| this.code = code; | |
| } | |
| } | |
| // Бросает 403/404, если юзер не участник пространства. Иначе возвращает запись membership. | |
| export async function requireMember(request, spaceId) { | |
| const space = db.prepare('SELECT id FROM spaces WHERE id = ?').get(spaceId); | |
| if (!space) { | |
| throw new HttpError(404, 'NOT_FOUND', 'Пространство не найдено'); | |
| } | |
| const member = db | |
| .prepare('SELECT * FROM space_members WHERE space_id = ? AND user_id = ?') | |
| .get(spaceId, request.user.id); | |
| if (!member) { | |
| throw new HttpError(403, 'FORBIDDEN', 'Нет доступа к этому пространству'); | |
| } | |
| return member; | |
| } | |
| export { HttpError }; | |