SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Bestimmte Felder in EditForm mit Passwort schützen

Unbeantwortet Dieser Beitrag hat 3 Antworten

Ohne Rang
367 Beiträge
Tiac erstellt 14 Juli 2015 08:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community,

ich habe eine neue Anforderung an eine unsere Listen bekommen.

In der Liste gibt es 4 verschiedene Betragsfelder (Betrag A, Betrag B, Betrag C, Betrag D) und 4 verschiedene Datumsfelder (Datum 1, Datum 2, Datum 3, Datum 4). Jetzt soll jeweils bei einer Änderung von Betrag A und/oder Datum 1 eine Passwortabfrage vor dem Speichern eingebaut werden. So soll verhindert werden, dass jeder Benutzer der Zugriff braucht auch tatsächlich alles ändern darf.

Bisher konnte ich problemlos eine PW-Abfrage auf eine Seite oder auf eine komplette Form (Editform oder Newform legen). Doch jetzt scheitere ich an der "bedingten" PW-Abfrage. 

Hier ist ein Teil meiner allgemeinen PW Abfrage:

...

var password;

var pass1="Test";

password=prompt('Bitte Passwort eingeben!',' ');

if (password==pass1)

alert('Passwort korrekt, bitte mit OK bestätigen!'); 

...

Ich dachte mal kurz an die PresaveAction(), aber das habe ich bisher nur mit einem Feld gemacht und dann auch nur, wenn es leer war. Leider weiß ich nicht, ob es möglich ist das Script auf meine Anforderungen umzubauen.

Auch hier ist wieder ein Teil des Scripts:

...

var picker = document.getElementById("[FIELD-ID]")

        if (picker.value == "") 

             {

                     alert('Feld darf nicht leer sein');

                     return false;

                    }

                    else 

                    {

alert('Deine Angaben wurden erfolgreich gespeichert');

return true;

...

Vielleicht kann mir ja jemand von euch auf die Sprünge helfen, dass wäre super.

Danke und Grüße

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Juli 2015 08:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Daß das alles nicht wirklich sicher ist, weißt Du ja wahrscheinlich.

Ich habe keine fertige Lösung parat, aber prinzipiell mußt Du folgendes machen:

- definiere Variablen, mit denen Du Dir merkst, ob sich ein Feld geändert hat:
var datum1Changed = false;

- definiere change-Handler, die diese Variablen setzen:
$("#FieldnameDatum1").change(function() { datum1Changed = true; } );

- in preSaveAction kannst Du jetzt diese Variablen prüfen und dann bei Bedarf das Passwort abfragen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
367 Beiträge
Tiac Als Antwort am 20 Juli 2015 09:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja, das es keine Sicherheit ist, ist mir vollkommen bewusst. Ich habe auch mehrfach darauf hingewiesen und eher eine eigene Liste mit eigenen Berechtigungen empfohlen, dass ist aber nicht gewünscht. :o(

Ich habe mich jetzt noch mal an einem Script versucht, was mit den alten Wert ausliest und beim Speichern alt & neu vergleichen soll. Leider kann ich das Element wie gewohnt speichern, ohne das eine Abfrage kommt. 

So sieht das Script aus, welches ich mittels Inhaltseditor auf die EditForm lege:

var prev_value = "";
var password;
var pass1="test";
function store()
{
pre_val = document.getElementById("Field-ID").value
}
function PreSaveAction()
{
var cur_val = document.getElementById("Field-ID").value
 if(cur_val != pre_val)
password=prompt('Please enter your password to view this page!',' ');
if (password==pass1)
 alert('Password Correct!');
else alert("Value not changed");
}

Vielleicht kann mir jemand von euch helfen oder mir vielleicht ein Forum empfehlen, bei dem ich mit dem Code geholfen bekomme.

Vielen Dank im voraus

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 20 Juli 2015 10:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Funktion store wird nirgendwo aufgerufen und damit der alte Wert nicht gespeichert. Am Besten wird sein, Du schaust Dir das alles mal im Debugger an. Nur dann kannst Du feststellen, was hier genau passiert.

Und noch ein Tip von mir: mache bei Bedingungen immer geschweifte Klammern, auch wenn es nur eine Zeile betrifft. Man kann es einfach besser lesen und es ist deutlich weniger fehleranfällig. Also immer so:

if (condition) {
   doSomething();
}

Sonst können solche Sachen entstehen, die nicht das machen, wonach es auf den ersten Blick aussieht:

if (condition)
   doSomething();
   doSomeMore();

Viele Grüße
Andi
af @ evocom de
Blog