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 async Task <IViewComponentResult> InvokeAsync() { if (User.Identity.Name == null) { throw new UnauthorizedAccessException("Пользователь не вошел в систему."); } var user = await _userManager.FindByNameAsync(User.Identity.Name); var roles = await _userManager.GetRolesAsync(user); if (roles.Count != 1) { throw new Exception("Кол-во ролей пользователя должно быть равно 1."); } List <MenuElement> menuItems = _menuElementsRepository.GetMenuElementsForRole(roles[0]); /*var menuItems = _menuService.GetMenuItems(RolesHelper.RolesMenus.GetValueOrDefault(roles[0])); */ return(View(menuItems)); }