Files
kamaskandClaude Sonnet 5.5 115b5fb036 feat(users): configure users collection and validate email format
Migration sets access rules, password min 8, name max 100, password-only
auth, and a case-insensitive unique email index. A hook rejects non-ASCII
and malformed emails on every save. API tests cover registration, login,
and isolation between two users and a guest.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 18:24:33 +03:00

41 lines
1.2 KiB
JavaScript

/// <reference path="../pb_data/types.d.ts" />
function configureUsers(app, { deleteRule, nameMax, emailColumn }) {
const users = app.findCollectionByNameOrId('users');
users.listRule = 'id = @request.auth.id';
users.viewRule = 'id = @request.auth.id';
users.createRule = '';
users.updateRule = 'id = @request.auth.id';
users.deleteRule = deleteRule;
// Встроенный индекс PocketBase учитывает регистр: без замены A@x.ru и a@x.ru — разные аккаунты.
users.addIndex('idx_email__pb_users_auth_', true, emailColumn, "`email` != ''");
users.fields.getByName('password').min = 8;
users.fields.getByName('name').max = nameMax;
users.passwordAuth.enabled = true;
users.passwordAuth.identityFields = ['email'];
users.oauth2.enabled = false;
users.otp.enabled = false;
users.mfa.enabled = false;
app.save(users);
}
migrate(
(app) =>
configureUsers(app, {
deleteRule: null,
nameMax: 100,
emailColumn: '`email` COLLATE NOCASE',
}),
(app) =>
configureUsers(app, {
deleteRule: 'id = @request.auth.id',
nameMax: 255,
emailColumn: '`email`',
}),
);