På en site jeg er igang med, styres adgangen via logon. På siten har jeg en del ressourcer(word dokumenter) som kun skal være synlige for nogle bestemte.
Min strategi er at ligge ressourcerne uden for webscopet på ISS\'en og så via en asp fil fange filen efter at jeg har valideret personen.
Er der nogen der har nogle erfaringer med dette, eller har microsoft lavet en komponent der klare dette?
Problemet er at hvis jeg ligger filerne i Scopet på webserveren, så kan man umiddelbart, hvis man kender filnavnet, skrive url\'en i adressefeltet i browseren og ad den vej få adgang til et worddokumentet man måske ikke har rettighed til!
Altså er jeg nødt til at ligge worddokumentet udenfor scopet!
Har du prøvet at henvise til en sti der ikke ligger på wevseveren. F.eks. webseveren er C:\\Inetpub og dine filer ligger på C:\\myFiles\\ også simpelthen angive stien i dit asp dokument hvor den skal finde .doc dokumenterne.
Jeg har aldrig prøvet det før på IIS4/5, men jeg ved med MS Exchange server kan det lade sig gøre.
Læg filerne i en mappe, hvor IUSR_<MASHINENAME> ikke har adgang, og lad dine brugere logge ind med profiler svarende til hvad de skal have lov at se.
Men det lader til at du logger folk ind via asp, dvs. at du gemmer deres adgangskoder i en database, korrekt?
I så fald er det rigtigt at du skal placere dem udenfor scopet for at være sikker.
De eneste måder, jeg har erfaring med, til at få fat i sådanne filer er via FileSystemObject, eller via CDONTS, der kan hente dem og vedhæfte dem en email.
Ikke meget hjælp.
Led evt efter en komponent der kan gøre det
Eller vent et par timer, der er garanteret en smart måde.
Hvis jeg skal angive en sti, er den nødt til at være indenfor webscopet ellers kan browseren ikke få fat i filen.
Til geeten:
Jeg har selv overvejet filesystem objektet. Problemet er at det er et word dokument, så det duer ikke at skrive svaret ud fra filesystemobjektet, når det er html response. Jeg har overvejet om det ikke kan gøres ved at sætte contenttype til \"text/doc\" (i må ikke lige hænge mig op på om det er den rigtige contenttype) og så udskrive resultatet uden nogen html tags.
Til ldanielsen:
Ja, det er en database logon jeg bruger og jeg vil være meget træt af (ekstra kodning og generering af NT brugere) at skulle oprette en NT bruger for hver bruger jeg har i DB\'en. Jeg kunne forestille mig at der må være andre der har stået med denne problematik, så der er højst sandsynligt lavet en komponent der løser problemet. Jeg har dog ikke kunne finde noget på MSDN. Har dog ikke kikket andre steder!
En anden mulighed var jo at du havde en side med login hvor kun de bestemte brugere kunne logge ind og så havde du en uoload funktion til at ligge dine dokumenter op så kan du jo ligge dem hvor du vil og samtidig så updaterer din opload funktion en ASP side der indholder links til de dokumenter eller ikke direkte til dokumenterne men sådan at du med en eller anden mail komponent kan sende dokumentet til den E-Mail som brugeren indtaster for der kan du referere til en fil hvor som helt du vil på systemet.
Er det noget der kan bruges ? Jeg kan sagtens komme med en mere detaljeret forklaring hvis det er nødvendigt
Jeg har en anden \"nødløsning\" (Heller ikke for elegant), der går på at FileSystemObject, når brugeren ønsker en word-fil, kopierer filen til et dir indenfor webbet, hvorfra den kan downloades/åbnes. Derefter, skal den så slettes igen, fx. på Session_OnEnd, eller efter 5 min eller lign.
Så vil kun et lille udsnit af filerne være tilgængelige, og kun i kort tid. Ikke sikkert, men sikrere.
ja det er så også en mulighed men hvad mu hvis der ligger for mange eller filerne er for store så den melder time out inden den får kopieret dem,så får du ikke kopieret dine filer.
Public Function hent_dokument(ByVal filnavn As String) As Variant Dim binbyte() As Byte Dim filstrr As Long
\' Her kan der eventuelt tjekkes for retttigheder til hente dokumentet - det kræver dog bruger parameter
filnavn = \"c:\\inetpub\\dokumenter\\\" + filnavn Open filnavn For Binary Access Read As #filnr filstrr = FileLen(filnavn) ReDim binbyte(filstrr) Get #filnr, , binbyte Close #filnr hent_dokument = binbyte End Function
Jeg var lidt hurtig på tasterne og kom til at sende kommentaren.
Jeg har fundet løsningen!!
Løsningen er at lave en dll med den function som er beskrevet i forrige kommentar.
Den ASP side der tager fat i dll\'en ser ud som følger:
\'tjek om brugeren har rettighed til at hente dokumentet set komponent =server.CreateObject(\"container.klasserettighed\") ok=false ok = komponent.dokument_rettighed(session\"brugerid\"), Request.QueryString(\"fil) if ok then
\'hvis ok
\'find ud af hvad contenttype skal være doctype=right(Request.QueryString(\"fil\"), 3)
select case Ucase(trim(doctype)) case \"DOC\" Response.ContentType=\"application/msword\" case \"XLS\" Response.ContentType=\"application/x-msexcel\" case \"PPT\" Response.ContentType=\"application/x-powerpoint\"
end select
\'-- hent dokumentet
set dllkomp= Server.CreateObject(\"Container.klassehentdok\") varstream= dllkomp.hent_dokument(trim(Request.QueryString(\"fil\"))) Response.BinaryWrite(varstream) Response.end \' ellers skriv fejlmeddelelse else Response.ContentType=\"text/html\" Response.Write (\"Du har ikke rettighed til dette dokument\") end if
Der er lige et \"aber der die\". Den mappe som indeholder dokumenterne (c:\\inetpub\\dokumenter) skal shares.
Nu kan jeg desværre ikke give mig selv pointene ;-), men det er egentlig Ldanielsen, der har ledt mig på vej til denne løsning, så hvis Ldanielsen vil komme med et svar så er pointene dine.
Jeg vil godt takke for de mange indslag, og undskylde at jeg ikke har henvendt mig før nu.
Hilsen René
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.