Add curator roles/permissions with Users admin, and fix lineage branch joins.

Staff accounts use admin/curator roles and fine-grained flags; transitions connect source-to-target with color gradients and stream cutout masks so overlaps stay seamless.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Danila Khodjaef
2026-07-27 18:04:17 +03:00
co-authored by Cursor
parent bfa21989c9
commit 0466b77328
31 changed files with 1492 additions and 269 deletions
+41
View File
@@ -0,0 +1,41 @@
/** Fine-grained curator tool permissions. Admins are treated as having all. */
const ALL_PERMISSIONS = [
'images',
'checkup',
'curator_notes',
'translations',
'influences',
'tours',
'users',
];
function normalizePermissions(raw) {
if (!Array.isArray(raw)) return [];
const allowed = new Set(ALL_PERMISSIONS);
const out = [];
for (const key of raw) {
if (typeof key === 'string' && allowed.has(key) && !out.includes(key)) {
out.push(key);
}
}
return out;
}
function effectivePermissions(user) {
if (!user) return [];
if (user.role === 'admin') return [...ALL_PERMISSIONS];
return normalizePermissions(user.permissions);
}
function hasPermission(user, permission) {
if (!user || !permission) return false;
if (user.role === 'admin') return true;
return normalizePermissions(user.permissions).includes(permission);
}
module.exports = {
ALL_PERMISSIONS,
normalizePermissions,
effectivePermissions,
hasPermission,
};