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

@@ -17,11 +17,9 @@ export default function NavDrawer({ open, onClose, onMessages, onGroupManager, o
const isAdmin = user?.role === 'admin';
const isMobile = window.matchMedia('(pointer: coarse)').matches || window.innerWidth < 768;
// Team-managed access: check if user is in any of the designated manager groups
// (frontend-only — no API enforcement yet)
// Tool Manager access: admin always passes; non-admins pass if in a designated tool manager group
const userGroupIds = features.userGroupMemberships || [];
const canAccessGroupManager = isAdmin || (features.teamGroupManagers || []).some(gid => userGroupIds.includes(gid));
const canAccessScheduleManager = isAdmin || (features.teamScheduleManagers || []).some(gid => userGroupIds.includes(gid));
const canAccessTools = isAdmin || (features.teamToolManagers || []).some(gid => userGroupIds.includes(gid));
// Close on outside click
useEffect(() => {
@@ -74,22 +72,22 @@ export default function NavDrawer({ open, onClose, onMessages, onGroupManager, o
{item(NAV_ICON.messages, 'Messages', onMessages)}
{item(NAV_ICON.schedules, 'Schedules', () => {}, true)}
{/* Admin-only tools */}
{/* Admin-only: Branding + Settings */}
{isAdmin && (
<>
<div className="nav-drawer-section-label admin">Admin</div>
{item(NAV_ICON.users, 'User Manager', onUsers)}
{features.branding && item(NAV_ICON.branding, 'Branding', onBranding)}
{item(NAV_ICON.settings, 'Settings', onSettings)}
</>
)}
{/* Tools accessible to admins OR designated team groups */}
{(features.groupManager || features.scheduleManager) && !isMobile && (canAccessGroupManager || canAccessScheduleManager) && (
{/* Tools: accessible to admins OR designated tool manager groups */}
{canAccessTools && (
<>
<div className="nav-drawer-section-label admin">Tools</div>
{features.groupManager && canAccessGroupManager && item(NAV_ICON.groups, 'Group Manager', onGroupManager)}
{features.scheduleManager && canAccessScheduleManager && item(NAV_ICON.schedules, 'Schedule Manager', onScheduleManager || (() => {}))}
{item(NAV_ICON.users, 'User Manager', onUsers)}
{features.groupManager && !isMobile && item(NAV_ICON.groups, 'Group Manager', onGroupManager)}
{features.scheduleManager && !isMobile && item(NAV_ICON.schedules, 'Schedule Manager', onScheduleManager || (() => {}))}
</>
)}
</div>