private async Task<int> FillUserMenuItems(long? userId, IList<MenuItemDefinition> menuItemDefinitions, IList<UserMenuItem> userMenuItems) { var addedMenuItemCount = 0; foreach (var menuItemDefinition in menuItemDefinitions) { if (menuItemDefinition.RequiresAuthentication && !userId.HasValue) { continue; } if (!string.IsNullOrEmpty(menuItemDefinition.RequiredPermissionName) && (!userId.HasValue || !(await PermissionChecker.IsGrantedAsync(userId.Value, menuItemDefinition.RequiredPermissionName)))) { continue; } if (menuItemDefinition.FeatureDependency != null && OwSession.MultiTenancySide == MultiTenancySides.Tenant && !(await menuItemDefinition.FeatureDependency.IsSatisfiedAsync(_featureDependencyContext))) { continue; } var userMenuItem = new UserMenuItem(menuItemDefinition); if (menuItemDefinition.IsLeaf || (await FillUserMenuItems(userId, menuItemDefinition.Items, userMenuItem.Items)) > 0) { userMenuItems.Add(userMenuItem); ++addedMenuItemCount; } } return addedMenuItemCount; }
private static void AppendMenuItem(int indentLength, StringBuilder sb, UserMenuItem menuItem) { sb.AppendLine("{"); sb.AppendLine(new string(' ', indentLength + 4) + "name: '" + menuItem.Name + "',"); sb.AppendLine(new string(' ', indentLength + 4) + "order: '" + menuItem.Order + "',"); if (!string.IsNullOrEmpty(menuItem.Icon)) { sb.AppendLine(new string(' ', indentLength + 4) + "icon: '" + menuItem.Icon.Replace("'", @"\'") + "',"); } if (!string.IsNullOrEmpty(menuItem.Url)) { sb.AppendLine(new string(' ', indentLength + 4) + "url: '" + menuItem.Url.Replace("'", @"\'") + "',"); } if (menuItem.DisplayName != null) { sb.AppendLine(new string(' ', indentLength + 4) + "displayName: '" + menuItem.DisplayName.Replace("'", @"\'") + "',"); } if (menuItem.CustomData != null) { sb.AppendLine(new string(' ', indentLength + 4) + "customData: " + menuItem.CustomData.ToJsonString(true) + ","); } sb.Append(new string(' ', indentLength + 4) + "items: ["); for (int i = 0; i < menuItem.Items.Count; i++) { AppendMenuItem(24, sb, menuItem.Items[i]); if (menuItem.Items.Count - 1 > i) { sb.Append(" , "); } } sb.AppendLine("]"); sb.Append(new string(' ', indentLength) + "}"); }