public static async Task <bool> EnsureMenuElements(IServiceProvider service) { RoleManager <UserRole> roleManager = service.GetRequiredService <RoleManager <UserRole> >(); IMenuElementRepository menuElementRepository = service.GetRequiredService <IMenuElementRepository>(); var menuItems = typeof(RolesHelper).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static) .Where(fi => fi.IsPrivate && fi.IsStatic && fi.FieldType == typeof(MenuItem)) .Select(x => (MenuItem)x.GetValue(new MenuItem())) .ToList(); //заполняем элементы меню в таблицу if (menuElementRepository.GetMenuElementsCount() < menuItems.Count) { menuElementRepository.AddMenuElements( menuItems.Select(elem => new MenuElement { Title = elem.Title, AspAreaName = elem.AspAreaName, AspActionName = elem.AspActionName, AspControllerName = elem.AspControllerName }).ToList()); } //производим соединение между ролью и элементами меню и заполняем таблицу элементов меню foreach (var menu in RolesHelper.RolesMenus) { var role = await roleManager.FindByNameAsync(menu.Key); if (menuElementRepository.GetMenuElementsForRole(role.Name).Count == 0) { menuElementRepository.SetMenuElementsForRole(role, menu.Value.MenuItems .Select(elem => new MenuElement( elem.Title, elem.AspAreaName, elem.AspControllerName, elem.AspActionName)) .ToList()); } } return(true); }
public TopMenuViewComponent(UserManager <User> userManager, IMenuElementRepository menuElementRepository /*MenuService<MenuForRole> menuService*/) { //_menuService = menuService; _userManager = userManager; _menuElementsRepository = menuElementRepository; }