2016-04-21 13 views
12

Mam kolekcję arkuszy kalkulacyjnych programu Excel, które chcę wyświetlać w mojej aplikacji ASP.NET 5 tylko uprawnionym użytkownikom.Jak mogę wyświetlać pliki statyczne tylko uprawnionym użytkownikom w ASP.NET 5?

  1. Gdzie mam przechowywać pliki? Zakładam na wwwroot (np. Wwwroot/files).
  2. Jeśli w witrynie WWWroot, w jaki sposób zezwolić na dostęp tylko uprawnionym użytkownikom? (Chciałbym obsłużyć je jako [Authorize] FileResult od kontrolera, ale to nadal pozostawia pliki otwarte dla bezpośredniego dostępu przez adres URL, który uważam.)
  3. Jak odwołać się do lokalizacji w wwwroot poprzez mój FileResult akcja w kontrolerze?

Wielkie dzięki!

Odpowiedz

16

Tak, powinny wejść na stronę wwwroot. Obecnie nie ma wbudowanego sposobu zabezpieczenia katalogów wwwroot. Ale stworzenie modułu oprogramowania pośredniego do jego wykonania jest dość proste. Istnieje łatwy do obejrzenia samouczek: here.

Jeśli nie znasz oprogramowania pośredniego, zamieściłem projekt GitHub, który pokazuje, jak utworzyć oprogramowanie pośrednie w trzech prostych krokach. Możesz pobrać projekt here.

Nie potrzebujesz kontrolera, aby uzyskać dostęp do plików statycznych.

+1

Awesome. Dziękuję Ci. Patrząc w to. (Używam tylko akcji, ponieważ chcę wysyłać powiadomienia, gdy pliki są pobierane.) – Gabe

+4

Lub możesz umieścić je * poza * wwwroot, gdzie nie działa oprogramowanie pośrednie plików statycznych. Jak dobry stary katalog App_Data (który wprawdzie trzeba samemu stworzyć) – blowdart

+0

@blowdart - To brzmi jak dobra alternatywa. –

4

w .NET rdzenia tworzenie dedykowanego katalogu WWW w takim samym poziomie jak wwwroot i użyć następującego kodu:

public HomeController(IHostingEnvironment hostingEnvironment) 
    { 
     _hostingEnvironment = hostingEnvironment; 
    } 

    [Authorize(Roles = "SomeRole")] 
    public IActionResult Performance() 
    { 
     return PhysicalFile(Path.Combine(_hostingEnvironment.ContentRootPath, "www", "MyStaticFile.pdf"), "application/pdf"); 
    } 

opiera się na następujących odpowiedzi (dla .netCore): static file authorization

+0

Należy zauważyć, że powyższe działanie można zażądać w widoku. Powiedz na przykład, że/Home/Performance zwraca obraz/png. Inne działanie - rodzaj Home/ParentPerformance, może zwrócić View() w standardowy sposób, a wewnątrz widoku można odwoływać się do chronionego statycznego zasobu. Na przykład: '' Ma to tę zaletę, że nadal wyświetlasz kopertę HTML z udostępnionym systemem menu _Layout i wygląda i czujesz, zachowując jednocześnie bezpieczeństwo w pliku statycznym. – Guy

+0

BTW, wyświetlałem do niedawna pliki PDF, ale okazało się, że ** wrażenia z plików pdf na Androidzie są okropne **, zmuszając do pobrania/anulowania, a kończąc na tym, że użytkownicy nie uzyskują płynnego wrażenia, w przeciwieństwie do IOS, w tym trochę pomniejszania ekranu Granic. Krótko mówiąc, nie to, czego można się spodziewać. Od tego czasu eksportuję plik PDF do formatu PNG za pomocą [InkScape] (https://inkscape.org), a to idealnie pasuje do '' wewnątrz wspomnianego powyżej html. – Guy

0

To jest bardzo prosty przykład, ale można go zmienić, aby sprawdzić konkretne role, a kod można przenieść z pliku Startup.cs, aby uzyskać większą elastyczność.

app.Use(async (context, next) => 
       { 
        if (!context.User.Identity.IsAuthenticated && context.Request.Path.StartsWithSegments("/excelfiles")) 
        { 
         throw new Exception("Not authenticated"); 
        } 
        await next.Invoke(); 
       }); 
Powiązane problemy