public virtual async Task UpdateAsync(string providerName, string providerKey, UpdateMenuGrantsDto input) { await CheckProviderPolicy(providerName); foreach (var grantDto in input.Menus) { await _menuManager.SetAsync(grantDto.Id, providerName, providerKey, grantDto.IsGranted); } var permissions = _menuManager.GetPermissions(providerName); var updatePermissionDtos = permissions .Select(x => { var menuDto = input.Menus.FirstOrDefault(y => y.PermissionKey == x.Name); var dto = new UpdatePermissionDto { Name = x.Name, IsGranted = menuDto?.IsGranted ?? false // 默认不给予授权,如果菜单与权限绑定,则以菜单的授权为主。 }; return(dto); }) .ToArray(); await _permissionAppService.UpdateAsync( providerName, providerKey, new UpdatePermissionsDto { Permissions = updatePermissionDtos } ); }