From 9b3616b10392e247974eb0c1e6225a1582bf6c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 13 Dec 2022 11:05:06 -0500 Subject: [PATCH] refactor: move canPostTopic to privs and use on /unread /tag --- src/controllers/recent.js | 8 +------- src/controllers/tags.js | 4 +++- src/controllers/unread.js | 5 ++++- src/privileges/categories.js | 6 ++++++ 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/controllers/recent.js b/src/controllers/recent.js index 344ec3b3eb..2c4a6252eb 100644 --- a/src/controllers/recent.js +++ b/src/controllers/recent.js @@ -4,7 +4,6 @@ const nconf = require('nconf'); const user = require('../user'); -const categories = require('../categories'); const topics = require('../topics'); const meta = require('../meta'); const helpers = require('./helpers'); @@ -37,7 +36,7 @@ recentController.getData = async function (req, url, sort) { user.getSettings(req.uid), helpers.getSelectedCategory(cid), user.auth.getFeedToken(req.uid), - canPostTopic(req.uid), + privileges.categories.canPostTopic(req.uid), user.isPrivileged(req.uid), ]); @@ -90,10 +89,5 @@ recentController.getData = async function (req, url, sort) { return data; }; -async function canPostTopic(uid) { - let cids = await categories.getAllCidsFromSet('categories:cid'); - cids = await privileges.categories.filterCids('topics:create', cids, uid); - return cids.length > 0; -} require('../promisify')(recentController, ['get']); diff --git a/src/controllers/tags.js b/src/controllers/tags.js index a447460b1a..3165303445 100644 --- a/src/controllers/tags.js +++ b/src/controllers/tags.js @@ -25,10 +25,11 @@ tagsController.getTag = async function (req, res) { breadcrumbs: helpers.buildBreadcrumbs([{ text: '[[tags:tags]]', url: '/tags' }, { text: tag }]), title: `[[pages:tag, ${tag}]]`, }; - const [settings, cids, categoryData, isPrivileged] = await Promise.all([ + const [settings, cids, categoryData, canPost, isPrivileged] = await Promise.all([ user.getSettings(req.uid), cid || categories.getCidsByPrivilege('categories:cid', req.uid, 'topics:read'), helpers.getSelectedCategory(cid), + privileges.categories.canPostTopic(req.uid), user.isPrivileged(req.uid), ]); const start = Math.max(0, (page - 1) * settings.topicsPerPage); @@ -40,6 +41,7 @@ tagsController.getTag = async function (req, res) { ]); templateData.topics = await topics.getTopics(tids, req.uid); + templateData.canPost = canPost; templateData.showSelect = isPrivileged; templateData.showTopicTools = isPrivileged; templateData.allCategoriesUrl = `tags/${tag}${helpers.buildQueryString(req.query, 'cid', '')}`; diff --git a/src/controllers/unread.js b/src/controllers/unread.js index 38cda453a0..2f59f8e1ab 100644 --- a/src/controllers/unread.js +++ b/src/controllers/unread.js @@ -9,6 +9,7 @@ const pagination = require('../pagination'); const user = require('../user'); const topics = require('../topics'); const helpers = require('./helpers'); +const privileges = require('../privileges'); const unreadController = module.exports; const relative_path = nconf.get('relative_path'); @@ -17,9 +18,10 @@ unreadController.get = async function (req, res) { const { cid } = req.query; const filter = req.query.filter || ''; - const [categoryData, userSettings, isPrivileged] = await Promise.all([ + const [categoryData, userSettings, canPost, isPrivileged] = await Promise.all([ helpers.getSelectedCategory(cid), user.getSettings(req.uid), + privileges.categories.canPostTopic(req.uid), user.isPrivileged(req.uid), ]); @@ -53,6 +55,7 @@ unreadController.get = async function (req, res) { req.query.page = Math.max(1, Math.min(data.pageCount, page)); return helpers.redirect(res, `/unread?${querystring.stringify(req.query)}`); } + data.canPost = canPost; data.showSelect = true; data.showTopicTools = isPrivileged; data.allCategoriesUrl = `${baseUrl}${helpers.buildQueryString(req.query, 'cid', '')}`; diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 92b0edd849..564808f1a2 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -208,6 +208,12 @@ privsCategories.canMoveAllTopics = async function (currentCid, targetCid, uid) { return isAdmin || !isModerators.includes(false); }; +privsCategories.canPostTopic = async function (uid) { + let cids = await categories.getAllCidsFromSet('categories:cid'); + cids = await privsCategories.filterCids('topics:create', cids, uid); + return cids.length > 0; +}; + privsCategories.userPrivileges = async function (cid, uid) { const userPrivilegeList = await privsCategories.getUserPrivilegeList(); return await helpers.userOrGroupPrivileges(cid, uid, userPrivilegeList);