As a result, I got such a script, maybe it will be useful to someone.
const Theme = {}
const user = require.main.require('./src/user')
const privileges = require.main.require('./src/privileges')
Theme.getUsersByCategory = async function(data) {
const { templateData: { cid } } = data
const allUserIds = await user.getUidsFromSet('users:joindate', 0, -1)
const asyncFilter = async (arr, predicate) => {
const results = await Promise.all(arr.map(predicate))
return arr.filter((element, index) => results[index])
}
const availableUserIds = await asyncFilter(allUserIds, async (id) => {
return await privileges.categories.can('read', cid, id)
})
data.templateData.availableUsers = await user.getUsersData(availableUserIds)
return data
}
module.exports = Theme