Restrict proclamation editing and content to Super admins only

- Only roleId <= 1 (SUPER) can create/edit/delete proclamations
- Content field is stripped from records for non-Super users
- Content field is hidden from the form for non-Super users
- Server actions reject upsert/delete from non-Super users
This commit is contained in:
NeilClack
2026-07-07 22:10:54 -05:00
parent 4cef38a1ab
commit ce42414214
3 changed files with 48 additions and 19 deletions
@@ -8,9 +8,24 @@ import * as Schemas from '$lib/svelte-admin/schemas';
const config = getModelConfig('proclamations')!;
function viewerRoleId(locals: App.Locals): number {
return (locals.user as { roleId?: number } | null)?.roleId ?? 4;
}
function isSuper(locals: App.Locals): boolean {
return viewerRoleId(locals) <= 1;
}
export const load: PageServerLoad = async ({ locals }) => {
const base = await loadRecords(locals, config);
// Strip content from non-Super users
if (!isSuper(locals)) {
for (const record of base.records) {
delete record.content;
}
}
const categories = await prisma.proclamationCategory.findMany({
select: { id: true, name: true, parentId: true },
orderBy: { name: 'asc' }
@@ -25,6 +40,10 @@ export const actions = {
return { success: false, error: 'Unauthorized' };
}
if (!isSuper(locals)) {
return { success: false, error: 'Only Super admins can edit proclamations' };
}
const formData = await request.formData();
const form = await superValidate(formData, zod4(Schemas.Proclamation));
if (!form.valid) {
@@ -70,6 +89,9 @@ export const actions = {
return { success: true };
},
delete: async ({ request, locals }) => {
if (!isSuper(locals)) {
return { success: false, error: 'Only Super admins can delete proclamations' };
}
return deleteRecord(request, config, locals);
}
};