v0.9.44 permissions changes

This commit is contained in:
2026-03-16 20:15:28 -04:00
parent 177c05d7da
commit ccfccaac0c
11 changed files with 52 additions and 62 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "jama-backend",
"version": "0.9.43",
"version": "0.9.44",
"description": "TeamChat backend server",
"main": "src/index.js",
"scripts": {

View File

@@ -43,15 +43,18 @@ function adminMiddleware(req, res, next) {
next();
}
// Allows admins OR members of groups designated as Group Managers or Schedule Managers
// Allows admins OR members of groups designated as Tool Managers
function teamManagerMiddleware(req, res, next) {
if (req.user?.role === 'admin') return next();
const db = getDb();
const gmSetting = db.prepare("SELECT value FROM settings WHERE key = 'team_group_managers'").get();
const smSetting = db.prepare("SELECT value FROM settings WHERE key = 'team_schedule_managers'").get();
// Prefer unified key, fall back to legacy keys for older installs
const tmSetting = db.prepare("SELECT value FROM settings WHERE key = 'team_tool_managers'").get();
const gmSetting = db.prepare("SELECT value FROM settings WHERE key = 'team_group_managers'").get();
const allowedGroupIds = [
...JSON.parse(gmSetting?.value || '[]'),
...JSON.parse(smSetting?.value || '[]'),
...new Set([
...JSON.parse(tmSetting?.value || '[]'),
...JSON.parse(gmSetting?.value || '[]'),
])
];
if (allowedGroupIds.length === 0) return res.status(403).json({ error: 'Access denied' });
const member = db.prepare(`

View File

@@ -220,6 +220,7 @@ function initDb() {
insertSetting.run('app_type', 'JAMA-Chat');
insertSetting.run('team_group_managers', '');
insertSetting.run('team_schedule_managers', '');
insertSetting.run('team_tool_managers', '');
// Migration: add hide_admin_tag if upgrading from older version
try {

View File

@@ -174,11 +174,16 @@ router.post('/register', authMiddleware, adminMiddleware, (req, res) => {
// Save team management group assignments
router.patch('/team', authMiddleware, adminMiddleware, (req, res) => {
const { groupManagers, scheduleManagers } = req.body;
const { toolManagers } = req.body;
const db = getDb();
const upd = db.prepare("INSERT INTO settings (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = ?, updated_at = datetime('now')");
if (groupManagers !== undefined) upd.run('team_group_managers', JSON.stringify(groupManagers || []), JSON.stringify(groupManagers || []));
if (scheduleManagers !== undefined) upd.run('team_schedule_managers', JSON.stringify(scheduleManagers || []), JSON.stringify(scheduleManagers || []));
if (toolManagers !== undefined) {
const val = JSON.stringify(toolManagers || []);
upd.run('team_tool_managers', val, val);
// Keep legacy keys in sync so existing teamManagerMiddleware still works
upd.run('team_group_managers', val, val);
upd.run('team_schedule_managers', val, val);
}
res.json({ success: true });
});