From 5c35dc866c7802716ce2f9da61e5fa7235392821 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 12 Feb 2026 14:18:19 -0500 Subject: [PATCH] feat: introduce new topics:crosspost privilege --- .../en-GB/admin/manage/privileges.json | 1 + src/categories/create.js | 1 + src/privileges/categories.js | 1 + src/upgrades/4.9.0/crosspost_privilege.js | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+) create mode 100644 src/upgrades/4.9.0/crosspost_privilege.js diff --git a/public/language/en-GB/admin/manage/privileges.json b/public/language/en-GB/admin/manage/privileges.json index 240cff6aa5..bb4b33494f 100644 --- a/public/language/en-GB/admin/manage/privileges.json +++ b/public/language/en-GB/admin/manage/privileges.json @@ -29,6 +29,7 @@ "access-topics": "Access Topics", "create-topics": "Create Topics", "reply-to-topics": "Reply to Topics", + "crosspost-topics": "Cross-post Topics", "schedule-topics": "Schedule Topics", "tag-topics": "Tag Topics", "edit-posts": "Edit Posts", diff --git a/src/categories/create.js b/src/categories/create.js index d9d59dac59..92f63f27e6 100644 --- a/src/categories/create.js +++ b/src/categories/create.js @@ -59,6 +59,7 @@ module.exports = function (Categories) { 'groups:topics:read', 'groups:topics:create', 'groups:topics:reply', + 'groups:topics:crosspost', 'groups:topics:tag', 'groups:posts:edit', 'groups:posts:history', diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 0e48b37c90..61fda1317a 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -23,6 +23,7 @@ const _privilegeMap = new Map([ ['topics:read', { label: '[[admin/manage/privileges:access-topics]]', type: 'viewing' }], ['topics:create', { label: '[[admin/manage/privileges:create-topics]]', type: 'posting' }], ['topics:reply', { label: '[[admin/manage/privileges:reply-to-topics]]', type: 'posting' }], + ['topics:crosspost', { label: '[[admin/manage/privileges:crosspost-topics]]', type: 'posting' }], ['topics:schedule', { label: '[[admin/manage/privileges:schedule-topics]]', type: 'posting' }], ['topics:tag', { label: '[[admin/manage/privileges:tag-topics]]', type: 'posting' }], ['posts:edit', { label: '[[admin/manage/privileges:edit-posts]]', type: 'posting' }], diff --git a/src/upgrades/4.9.0/crosspost_privilege.js b/src/upgrades/4.9.0/crosspost_privilege.js new file mode 100644 index 0000000000..5cd55e997b --- /dev/null +++ b/src/upgrades/4.9.0/crosspost_privilege.js @@ -0,0 +1,18 @@ +'use strict'; + +const privileges = require('../../privileges'); +const db = require('../../database'); + +module.exports = { + name: 'Give topic:crosspost privilege to registered-users on all categories', + timestamp: Date.UTC(2026, 1, 12), + method: async () => { + const cids = await db.getSortedSetMembers('categories:cid'); + await Promise.all(cids.map(async (cid) => { + const can = await privileges.categories.can('topics:create', cid, 'registered-users'); + if (can) { + await privileges.categories.give(['groups:topics:crosspost'], cid, 'registered-users'); + } + })); + }, +};