Avatar billede goose Nybegynder
07. juni 2005 - 18:05 Der er 14 kommentarer og
1 løsning

Opbygning af brugeradministration

Hvis man nu vil lave et administrationssystem hvor der kan være flere redaktører med hvert deres login, hvordan sikre man sig så, at bruger nr. 2 ikke får mulighed for at åbne et dokument som bruger nr. 1 har åben ?

Ligeledes, hvis bruger nr. 1 ikke logger sig ordentlig af men blot lukker browseren, så skal evt. dokumenter som denne bruger har haft åben jo være tilgængelige for andre ?

Jeg er interesseret i løsningsforslag, henvisninger til tutorials og lign.

Bruger Access database

Hvis jeg ikke lige svarer på evt. indlæg ret hurtigt er det fordi eksperten ikke formår at sende mails i øjeblikket (igen)

/Goose
Avatar billede jensdreier Nybegynder
07. juni 2005 - 18:57 #1
Avatar billede nielle Nybegynder
07. juni 2005 - 19:02 #2
Når det foregår via Internettet kan du aldrig lave en perfekt løsning på denne slags problemstillinger; Når en bruger har hentet en side så er forbindelsen jo afbrudt totalt.

Det næstbedste:

1) Du styre det via en passende tabel med minimum følgende oplysninger:

DokumentID, BrugerID, UdtjekningsTidspunkt

Denne tabel angiver hvilke dokumenter der i øjeblikket er "tjekket ud", af hvem og hvornår dette skete.

2) Når en bruger vil redigere et dokument, skal hun først tjekke det ud af systemet:

2a) Enten optræder dokumentet ikke allerede i tabellen, og så før brugeren lov til at få dokumentet uden videre. Samtidigt oprettes der en post i tabellen med de relevante oplyninger.

2b) Hvis dokumentet allerede optræder i tabellen som tjekket ud så advares brugeren. Brugeren får nu mulighed for at vælge at stoppe med sit forehavende, eller at fortsætte alligevel under eget ansvar (dette kan man selvfølgeligt vælge at nægte). Hvis brugeren vælger det sidste, så skrives der endnu en post i tabellen.

3) Når en bruger er færdig med at redigere et dokument, skal hun tjekke det ind igen:

3a) Hvis der står i tabellen at den pågældende bruger har tjekket netop dette dokument ud, og der vel at mærke ikke er nogen tilsvarende poster for andre brugere, så sker dette uden videre. Posten slettes derefter for at indikere at dokumentet ikke mere er tjekket ud.

3b) Hvis der imidlertid er andre poster på det pågældende dokument så advares brugeren om dette. Brugeren kan nu vælge at stoppe med sit forehavende, eller at fortsætte alligevel under eget ansvar (også dette kan man selvfølgeligt vælge at nægte). Hvis brugeren vælger det sidste, så slettes posten fra tavellen.

3c) Hvis der ikke er en post for det pågældende dokument, så advares brugeren om dette. Brugeren kan så vælge at fortsætte eller ej (eller man kan nægte dette).

4) Der skal endvidere være et administrations system sådan at en super-admin kan slette rækker i tabellen. Måske er der slet ikke sådan en super, og så et det bare brugerne som har adgang til dette.

5) Brugerne skal også have lov til at slette rækker fra tabellen som svare til et dokument de tidligere har tjekket ud. Dette svare til at de fortryder udtjekningen.

Ovenstående system er primært tænkt til at brugerne er ansvarlige individer som ikke er ude på at ødelægge noget for de andre brugere af systemet. De skal m.a.o. bare advares, hvis de er ved at gøre sådan noget.
Avatar billede goose Nybegynder
07. juni 2005 - 19:46 #3
jensdreier >> det er ikke selve logindelen jeg har problemer med, den er på plads.

nielle >> jeg skal vist lige læse din forklaring igennem et par gange før den siver ind, så jeg vender tilbage.

/Goose
Avatar billede nielle Nybegynder
07. juni 2005 - 19:52 #4
Du er selvfølgelig meget velkommen til at stille uddybende spørgsmål. :^)
Avatar billede goose Nybegynder
07. juni 2005 - 20:01 #5
Okay, nu har jeg læst det adskillige gange og det lyder rimelig indviklet.

Jeg har selv tumlet lidt med en idé men jeg ved ikke om det kan lade sig gøre, men den er som følger:

--------------------------------

Når bruger1 åbner et dokument, så bliver der i databasen tilføjet to ting til den pågældende id:

BrugerID (cookie)
Tidspunkt (dato og klokkeslet)

Når disse felter er udfyldt kan andre brugere ikke åbne samme dokument.

Så snart bruger1 har gemt det pågældende dokument, så fjernes disse oplysninger og andre kan redigere det pågældende dokument.

Når brugeren logger af systemet (på normal vis), så fjernes samtlige forekomster af den pågældende BrugerID såfremt der skulle være nogen i databasen.

---------------------------------

Mit problem er nu, hvad nu hvis brugeren bare lukker browseren og ikke logger korrekt af, så vil denne oprydning jo ikke blive gennemført.

Kan man bruge noget Session_OnEnd i global.asa eller lign. og hvor sikkert er det at denne oprydning bliver udført ?

Skal lige siges at jeg ikke har en hujende klapfis forstand på brugen af global.asa.

/Goose
Avatar billede nielle Nybegynder
07. juni 2005 - 20:08 #6
Problemet er at din session jo sagtens kan time ud af andre årsager end hvis brugeren logger af eller slukker sin browser. Det vil ikke være så smart at brugeren mister sine ændringer hvis det sker.
Avatar billede nielle Nybegynder
07. juni 2005 - 20:09 #7
... bortset fra det, så er din egen løsning da ikke så forskellig fra det jeg skitsere.
Avatar billede goose Nybegynder
07. juni 2005 - 22:19 #8
Ja jeg kan godt se at sessions godt kan time ud, men omvendt kan der jo ikke ske andet, end  at risikoen for at en anden bruger redigere samme dokument opstår. Bruger1 vil jo ikke som sådan blive smidt af, blot vil dokumentet stå som ledigt.

Hvor stor vil du umiddelbart tro risikoen er for, at en session bliver smidt midt i det hele hvis man samtidig sætter en session timeout på f.eks. 60 min. ?

Brugeren er logget ind med cookies, vil det også fjerne evt. cookies hvis sessionen forsvinder, for så er der helt klart et problem ?

Sessions bliver ikke som sådan brugt til noget, alle loginoplysninger ligger i cookies

Det er muligt at mit eksempel ligner dit, men hvad vil der ske, hvis en bruger i dit eksempel ikke logger rigtigt af men blot lukker browseren (jeg har lidt svært ved at gennemskue det) ?

/Goose
Avatar billede nielle Nybegynder
07. juni 2005 - 22:22 #9
Nu ved jeg jo ikke rigtigt noget om hvilken type dokumenter vi her snakker om. Er det f.eks. Word-dokumenter eller er det redigering direkte på selve hjemmesiden? Er det store dokumenter?
Avatar billede diggerx Nybegynder
07. juni 2005 - 22:35 #10
Der findes en JavaScript komando der hedder onleave, dvs. du lave det sådan at når en bruger lukker browseren eller forlader siden, så redirectes til en sider der logger af.

Det bruges ti i forbindelse med reklamer.

Jeg er desværre ikke særlig god til js så jeg kan ikke lave den for dig, men du kunne prøve at lægge den ind under js kategorien.
Avatar billede nielle Nybegynder
08. juni 2005 - 06:44 #11
Alt der på en eller anden måde afhænger af at brugeren opføre sig "pænt" bør undgås. Systemet skulle jo netop være hårdført overfor grimme scenarioer. Man bør derfor heller ikke basere sig (alt for meget) på at onleave udføres.
Avatar billede goose Nybegynder
08. juni 2005 - 07:43 #12
nielle >> jeg ved godt jeg skriver dokumenter, men det er et onlinesystem beregnet til vedligeholdelse af hjemmesider, altså en "normal" tekst, af forskellig størrelse, hentet fra en database.

diggers >> tror ikke lige det vil egne sig til det her formål - virker måske endnu mindre sikkert end løsningen med sessions.

/Goose
Avatar billede nielle Nybegynder
08. juni 2005 - 19:14 #13
Ok, det er altså totalt umuligt at forestille sig at det er muligt at redigere dokumenterne offline. :^)

Når en bruger vil redigere et dokument starter hun vel med at klikke på et link eller noget tilsvarende. Derefter (hvis hun altså får lov) kommer dokumentet frem i redigerings-mode på en ny html-side. Der kan være forskellige måder dette gøres på: i et textarea, i en ActiveX komponent eller muligvis via noget htc. Den eksakte måde er egentlig ligegyldig - det er alle samme tilfælde hvor at selve dokumentet ligger "indlejret" på en almindelig html-side, hvor der sagtens kan lægges andre ting (f.eks. en submit knap sådan at brugeren kan gemme dokumentet).

En af de andre ting som kunne ligge på siden kunne så være en lille iframe som ligger og reloader sig selv med jævne mellemrum. I det nedenstående som PHP, men det kunne lige så godt være ASP eller noget andet for den sags skyld.

Iframen indeholder denne kode:

<iframe src="keepalive.php" width="1px" height="1px">Denne browser understøtter ikke iframe – opdater til en som gør.</iframe>

Filen keepalive.php:

<html>
<head>
    <meta http-equiv="Refresh" content="5;url=keepalive.php">
    <title>Eksperten.dk</title>
</head>
<body>

<?php
    // PHP kode her ...
?>

</body>
</html>

Denne genloader sig selv med en frekvens på 5 sekunder (med en irriterende lille klik-lyd til). Du kan nok med fordel sætte denne op til 60 eller måske til 300 sekunder.

Metoden kræver dog at brugeren bruger en relativ ny browser for at være understøttet.

Med det ovenstående har du en metode til at vurdere om brugeren stadig er i gang med at redigere på dokumentet. For hvert klik bliver keepalive.php kaldt. Du kan derfor inkludere noget kode i filen som opdatere i din database.

Databasen skal stadig indeholde en tabel, som denne:

DokumentID, BrugerID, SenesteKlikTidspunkt

Når brugeren starter med at åbne dokumentet skrives der en række i tabellen.

Hver gang keepalive.php kaldes opdateres denne række. Du skal nok tilføje DokumentID og BrugerID id’erne til de relevante URL’s for at dette kan lade sig gøre, eller du kan hente dem i din session eller via en cookie.

Hvis en ny bruger beder om at måtte redigere dokumentet, slås der først på i tabellen. Hvis der ligger en post i tabellen på det dokument, så tjekkes tidspunktet i SenesteKlikTidspunkt. Hvis dette tidspunkt er alt for gammelt i forhold til din keepalive-frekvens så tillades redigeringen, ellers ikke.

Der er egentlig ingen speciel grund til at slette rækken når brugeren er færdig med at redigere dokumentet. Tiden går jo, og på et eller andet tidspunkt så vil låsen automatisk time ud.
Avatar billede goose Nybegynder
08. juni 2005 - 22:18 #14
Okay, nu tror jeg lige jeg skal bruge lidt tid på at sætte mig ind i alt det her og teste nogle ting af, så hvis du lægger et svar nielle, så får du pointene som tak for en brugbar dialog.

/Goose
Avatar billede nielle Nybegynder
08. juni 2005 - 23:12 #15
Svar :^)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester