1
This commit is contained in:
@@ -28,30 +28,25 @@ async def public_list_menu_configs(
|
||||
all_menus = result.scalars().all()
|
||||
|
||||
# Filter menus based on user permissions
|
||||
# If user has allowed_menus set, show only those menus
|
||||
# Otherwise, show all default menus (is_default=True)
|
||||
# Show default menus + user-specific allowed menus (merged)
|
||||
user_allowed_paths = set(current_user.allowed_menus or [])
|
||||
|
||||
if user_allowed_paths:
|
||||
# User has explicit menu permissions - show only allowed menus
|
||||
allowed_ids = set()
|
||||
for menu in all_menus:
|
||||
if menu.path in user_allowed_paths:
|
||||
allowed_ids.add(menu.id)
|
||||
if menu.parent_id:
|
||||
allowed_ids.add(menu.parent_id)
|
||||
|
||||
menus = [m for m in all_menus if m.id in allowed_ids]
|
||||
else:
|
||||
# No explicit permissions - show default menus
|
||||
default_ids = set()
|
||||
for menu in all_menus:
|
||||
if menu.is_default:
|
||||
default_ids.add(menu.id)
|
||||
if menu.parent_id:
|
||||
default_ids.add(menu.parent_id)
|
||||
|
||||
menus = [m for m in all_menus if m.id in default_ids]
|
||||
# Start with default menus
|
||||
allowed_ids = set()
|
||||
for menu in all_menus:
|
||||
if menu.is_default:
|
||||
allowed_ids.add(menu.id)
|
||||
if menu.parent_id:
|
||||
allowed_ids.add(menu.parent_id)
|
||||
|
||||
# Add user-specific allowed menus (merge with defaults)
|
||||
for menu in all_menus:
|
||||
if menu.path in user_allowed_paths:
|
||||
allowed_ids.add(menu.id)
|
||||
if menu.parent_id:
|
||||
allowed_ids.add(menu.parent_id)
|
||||
|
||||
menus = [m for m in all_menus if m.id in allowed_ids]
|
||||
|
||||
return [
|
||||
{
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -28,7 +28,7 @@
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<script type="module" crossorigin src="/assets/index-CV-32V7M.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-COnmuf9j.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-eLRg4pQk.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -258,21 +258,7 @@ const AppLayout: React.FC = () => {
|
||||
|
||||
useEffect(() => {
|
||||
getMenuConfigs().then(data => {
|
||||
let items = data.filter((m: any) => m.is_active !== false && m.isActive !== false);
|
||||
// Filter by user's allowed menus if set
|
||||
if (user?.allowedMenus && user.allowedMenus.length > 0) {
|
||||
const allowed = new Set(user.allowedMenus);
|
||||
const groupIds = new Set<string>();
|
||||
items.forEach((m: any) => {
|
||||
const pid = m.parent_id ?? m.parentId;
|
||||
if (pid && allowed.has(m.path)) groupIds.add(pid);
|
||||
});
|
||||
items = items.filter((m: any) => {
|
||||
const mt = m.menu_type ?? m.menuType;
|
||||
if (mt === 'group' && groupIds.has(m.id)) return true;
|
||||
return allowed.has(m.path);
|
||||
});
|
||||
}
|
||||
const items = data.filter((m: any) => m.is_active !== false && m.isActive !== false);
|
||||
setMenuItems(items);
|
||||
}).catch(() => { });
|
||||
getRechargePackages().then(data => {
|
||||
@@ -486,13 +472,13 @@ const AppLayout: React.FC = () => {
|
||||
|
||||
// Render groups with children
|
||||
groups.sort((a, b) => {
|
||||
const orderA = a.sortOrder !== undefined ? a.sortOrder : Infinity;
|
||||
const orderB = b.sortOrder !== undefined ? b.sortOrder : Infinity;
|
||||
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
||||
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
||||
return orderA - orderB;
|
||||
}).forEach(g => {
|
||||
const children = (childMap[g.id] || []).sort((a, b) => {
|
||||
const orderA = a.sortOrder !== undefined ? a.sortOrder : Infinity;
|
||||
const orderB = b.sortOrder !== undefined ? b.sortOrder : Infinity;
|
||||
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
||||
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
||||
return orderA - orderB;
|
||||
});
|
||||
items.push(
|
||||
@@ -510,8 +496,8 @@ const AppLayout: React.FC = () => {
|
||||
|
||||
// Render top-level pages
|
||||
topLevel.sort((a, b) => {
|
||||
const orderA = a.sortOrder !== undefined ? a.sortOrder : Infinity;
|
||||
const orderB = b.sortOrder !== undefined ? b.sortOrder : Infinity;
|
||||
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
||||
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
||||
return orderA - orderB;
|
||||
}).forEach(m => {
|
||||
items.push(renderMenuItem(m));
|
||||
|
||||
Reference in New Issue
Block a user