Ejemplo n.º 1
0
 public async Task <Response <List <MenuResponse> > > GetMenusByRoleNames([FromBody] GetMenusByRoleNameRequest roleName)
 {
     return(await _menuService.GetMenusByRoleNamesAsync(roleName));
 }
Ejemplo n.º 2
0
        /// <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()));
        }