Added protecting hooks

This commit is contained in:
2026-09-25 12:42:38 +02:00
parent 9a18434f4a
commit b82ef82f50
33 changed files with 733 additions and 6 deletions
+31
View File
@@ -0,0 +1,31 @@
import { APIError } from 'payload';
/**
* Field hook for a System Page role relationship in SiteSettings: ensures a page
* isn't assigned to two roles at once (e.g. the same page as both homepage and
* privacyPolicy), which would make routing ambiguous.
*
* Attach to each role field's beforeValidate. `siblingFields` are the OTHER role
* field names to check against.
*
* hooks: { beforeValidate: [buildValidateUniqueRole({
* siblingFields: ['privacyPolicy', 'cookiePolicy', 'termsOfService'],
* })] }
*/ export function buildValidateUniqueRole(args) {
return ({ field, siblingData, value })=>{
if (value == null) {
return value;
}
const thisId = typeof value === 'object' ? value.id : value;
for (const sibling of args.siblingFields){
const other = siblingData?.[sibling];
const otherId = other && typeof other === 'object' ? other.id : other;
if (otherId != null && String(otherId) === String(thisId)) {
const name = typeof field === 'object' && 'name' in field ? field.name : 'ta rola';
throw new APIError(`Ta sama strona jest przypisana do "${name}" i "${sibling}". ` + `Każda rola systemowa musi wskazywać inną stronę.`, 400);
}
}
return value;
};
}
//# sourceMappingURL=validateUniqueRole.js.map