PDA

Vollständige Version anzeigen : Temporäre Erhöhung / Anpassung der Benutzerrechte per Code


joshua
11.05.2001, 03:56
Hallo Leute

Ist es möglich, dass man per Code einem Benutzer zeitweilig höhere Rechte erteilt, damit z.B. in einer Back-End-Datenbank (natürlich wiederum per Code) neue Felder hinzugefügt werden können.

Ich denke da insbesondere an den Fall, dass beim Starten des Front-End die "Version" des Back-End geprüft wird und allenfalls fehlende Felder ergänzt werden. Jetzt hat natürlich der Benutzer die nötigen Rechte für diese "Manipulation" nicht von Haus aus...

Wie müsste die Vorgehensweise lauten, damit dies trotzdem möglich wird...?

Besten Dank für jegliche tatkräftige Unterstützung

MarkusR
11.05.2001, 09:48
Du kannst dem Programm auch einen Account mit erweiterten Rechten einrichten, und die Änderungen dann in einem seperaten Workspace laufen lassen:

Dim ws As Workspace
dim dbs as database
Dim strbuf As String
Set ws = DBEngine.CreateWorkspace("", "deinProgramm", "dasKennwort")
set dbs=ws.opendatabase(currentdb.name)

schon hast du die DB mit Admin-Rechten offen.
(Wenn du aus dem Front-End das Back-End öffnen willst, geht das mit currentdb.name natürlich nicht, sondern du must den entsprechenden Pfad angeben.)

Viel Glück

Markus

Sascha Trowitzsch
11.05.2001, 10:51
Ich würde es auch wie Markus machen.
Ansonsten kannst du die Berechtigungen zu jeglichem Objekt über VBA mit der Auflistung Permissions ändern. (Aber die DB oder der Workspace muß dann erst geschlossen und wieder geöffnet werden). Schau mal in der Hilfe unter 'Permissions'.

Ciao, Sascha

joshua
14.05.2001, 12:45
Besten Dank Markus und Sascha für die Tips - war genau das, was ich gesucht hatte. Es lag ja bereits "vor" mir - aber eben, vor lauter Bäumen...

Ralf Pfiffer
14.05.2001, 20:27
Hallo Joshua,

das mit dem überprüfen beim starten der Front-End und das ergänzen Felder klingt interessant. Wie soll das gehen??? (wenn man fragen darf)

gruß Ralf

joshua
15.05.2001, 10:22
Hallo Ralf

Im Backend habe ich eine Tabelle Firmenkonstanten, die diverse Einstellungen zum Programm enthält (z.B. Pfade, Passwörter etc.). Ausserdem hat es ein Feld "Version" mit der Version der Backend-DB (z.B. "2.5").

Beim Starten des Frontend, wird nun dieses Feld abgefragt und wenn die Version kleiner als x.y ist, weiss ich, dass evtl. neue Felder hinzugefügt werden müssen, die im alten Release noch nicht vorhanden waren:

Public Function DatenVersion()
Dim db As Database
Dim rst As Recordset
Set db = CurrentDb()
Set rst = db.OpenRecordset("Konstanten")
DatenVersion = rst!Version
rst.Close
db.Close

Public Function CheckDatenVersion(strVers As String)
Select Case DatenVersion
Case "1.2" ' Handy + Fax nicht vorhanden
Call AddField("Kunden", "Handy", "Text", 25)
Call AddField("Kunden", "Fax", "Text", 25)
Case "2.5" ' Nur Fax nicht vorhanden
Call AddField("Kunden", "Fax", "Text", 25)
Case ....

Die Funktion AddField schliesslich fügt die entsprechenden Felder ins Backend ein. Zu diesem Zweck muss natürlich der Benutzer höhere Rechte erhalten... wie im obigen Beispiel beschrieben - funktioniert einwandfrei:

Function AddField(strTable, strField, strType As String, intSize As Integer)
Dim ws As Workspace
Dim dbs As Database
Dim tdf As TableDef
Dim fld As Field
Set ws = DBEngine.CreateWorkspace("dummy", "AdminName", "AdminPasswort")
Set dbs = ws.OpenDatabase(strAktuellerBackendpfad) 'globale Variable
Set tdf = dbs.TableDefs(strTable)
Select Case strType
Case "Text"
Set fld = tdf.CreateField(strField, dbText, intSize)
tdf.Fields.Append fld
Case ...
dbs.close
ws.close

Hoffe mit diesen Angaben zumindest einen Denkanstoss gegeben zu haben...!