public async Task <Response <List <MenuResponse> > > GetMenusByRoleNames([FromBody] GetMenusByRoleNameRequest roleName) { return(await _menuService.GetMenusByRoleNamesAsync(roleName)); }
/// <summary> /// Lấy danh sách menu theo tên quyền /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <Response <List <MenuResponse> > > GetMenusByRoleNamesAsync(GetMenusByRoleNameRequest request) { if (request.RoleNames.Count() < 0 || request.RoleNames == null) { _logger.LogError("No role input"); return(new Response <List <MenuResponse> >(Constant.STATUS_ERROR, new List <string> { "No role input" })); } var listRole = new List <AppRole>(); var listRoleId = new List <Guid>(); foreach (var item in request.RoleNames) { var role = await _roleManager.FindByNameAsync(item); if (role != null) { listRole.Add(role); } } var menuRoles = new List <MenuRole>(); foreach (var role in listRole) { var roles = _newsContext.MenuRoles.Where(x => x.RoleId.Equals(role.Id)); menuRoles.AddRange(roles); } if (menuRoles == null || menuRoles.Count() < 1) { _logger.LogError("No menu is accessed"); return(new Response <List <MenuResponse> >(Constant.STATUS_SUCESS, new List <string> { "No menu is accessed" })); } var menuResponses = new List <MenuResponse>(); foreach (var item in menuRoles) { var menu = await _newsContext.Menus.FindAsync(item.MenuId); if (menu.ParentId == null) { var subMenus = await GetSubMenusAsync(menu.Id); int i = 0; var listSubRemove = new List <int>(); foreach (var sub in subMenus ?? new List <MenuResponse> { }) { bool hasRole = false; foreach (var role in listRole) { if (IsMenuInRole(new Menu { Id = sub.Id }, role)) { hasRole = true; } } if (!hasRole) { listSubRemove.Add(i); } i++; } foreach (var index in listSubRemove) { subMenus.RemoveAt(index); } menuResponses.Add(new MenuResponse { Id = menu.Id, MenuName = menu.MenuName, ParentId = menu.ParentId, Href = menu.Href, Icon = menu.Icon, SubMenus = subMenus, Role = await GetRolesAsync(menu.Id) }); } } menuResponses = menuResponses.Distinct(new ItemEqualityComparer()).ToList(); return(new Response <List <MenuResponse> >(Constant.STATUS_SUCESS, null, menuResponses, menuResponses.Count())); }