/// <summary>
        /// Initializes a new instance of the <see cref="DotNetFileSystem"/> class.
        /// </summary>
        /// <param name="rootPath">The path to use as root.</param>
        /// <param name="allowNonEmptyDirectoryDelete">Defines whether the deletion of non-empty directories is allowed.</param>
        /// <param name="streamBufferSize">Buffer size to be used in async IO methods.</param>
        /// <param name="flushStream">Flush the stream after every write operation.</param>
        public ServerManagerFileSystem(IAccountInformation account, IServiceProvider serviceProvider, string rootPath, bool allowNonEmptyDirectoryDelete, int streamBufferSize, bool flushStream)
        {
            _account         = account;
            _serviceProvider = serviceProvider;
            //_userManager = _serviceProvider.GetService<UserManager<MonitorUser>>();

            FileSystemEntryComparer = StringComparer.OrdinalIgnoreCase;
            Root = new ServerManagerDirectoryEntry(Directory.CreateDirectory(rootPath), allowNonEmptyDirectoryDelete);
            SupportsNonEmptyDirectoryDelete = allowNonEmptyDirectoryDelete;
            _streamBufferSize = streamBufferSize;
            _flushStream      = flushStream;
        }
        /// <inheritdoc/>
        public async Task <IUnixFileSystemEntry?> GetEntryByNameAsync(IUnixDirectoryEntry directoryEntry, string name, CancellationToken cancellationToken)
        {
            var managerDirEntry         = (ServerManagerDirectoryEntry)directoryEntry;
            IUnixFileSystemEntry?result = null;

            if (managerDirEntry.IsRoot || managerDirEntry.Info == null)
            {
                using (var scope = _serviceProvider.CreateScope())
                    using (var db = scope.ServiceProvider.GetService <MonitorDBContext>())
                        using (var userManager = scope.ServiceProvider.GetService <UserManager <MonitorUser> >())
                        {
                            IQueryable <Server> serversQuery = db.Servers;
                            var User = _account.FtpUser;
                            var user = await userManager.GetUserAsync(User);

                            if (!User.IsInRole("Admin"))
                            {
                                serversQuery = serversQuery.Where((server) =>
                                                                  user == server.Owner ||
                                                                  (server.Group != null
                            ? server.Group.Members.Any((group) => group.User == user)
                            : false)
                                                                  );
                            }

                            var server = await serversQuery.FirstOrDefaultAsync(s => s.Name == name, cancellationToken);

                            if (server != null)
                            {
                                result = new ServerManagerDirectoryEntry(server, new DirectoryInfo(server.Path), SupportsNonEmptyDirectoryDelete, true);
                            }
                        }
            }
            else
            {
                var searchDirInfo = managerDirEntry.Info;
                var fullPath      = Path.Combine(searchDirInfo.FullName, name);
                if (File.Exists(fullPath))
                {
                    result = new ServerManagerFileEntry(managerDirEntry.Server, new FileInfo(fullPath));
                }
                else if (Directory.Exists(fullPath))
                {
                    result = new ServerManagerDirectoryEntry(managerDirEntry.Server, new DirectoryInfo(fullPath), SupportsNonEmptyDirectoryDelete, false);
                }
            }

            return(result);
        }