Beveiligen met Environ("username").

Status
Niet open voor verdere reacties.

87122270student

Gebruiker
Lid geworden
29 jan 2007
Berichten
175
Hoi iedereen,

Dit is een vraag voor mij zelf en niet voor mijn studie.
op de volgende website vond ik iets over Environ("username").

Bij het openen komt de naam er te staan. ik heb een tabel met bepaalde rechten in de vorm van letters.
Maar hoe koppel in rechten aan objecten op een formulier/tabel of hele formulieren/tabellen??

Nu begrijp ik dat ik met "Environ" kijk wie er is ingelogd en met de tabel de naam opzoek en de rechtengroep, bijv. A.
Maar hoe geef ik rechten aan een formulier of bestand of kun je alleen op objecten rechten geven?

Kunnen jullie mij een stapje verder helpen?
Hier een bijlage

ik wil dat de gebruiker bijvoorbeeld enkel de verrekijker ziet.
de administrator mag alles zien op de introductiepagina.
 
Laatst bewerkt:
Inmiddels deze code gevonden:
Code:
Function Gebruiker()
     Gebruiker=Environ("Username")
End Function

Hier kon ik echter niks mee dus maar gewist. vervolgens de volgende link gevonden: Link. Maar zodra ik op een formulier een tekstvak maak met het besturingselemant "= FnUserInt()" werkt dit niet. Dit doe ik in het welkomsscherm.

Waarschijnlijk moet ik de module aanroepen op de een of andere manier, enkel "Call Fnuser" werkt niet.
Daarna moet ik iets doen met rechten op de andere bladen met IF neem ik aan.

Hierbij een nieuwe bijlage



Edit: het aanmeldingscherm werkt, de module hete ook Fnuser dubbele namen werken niet ;)
 

Bijlagen

Laatst bewerkt:
De functie Gebruiker doet niets anders dan de naam van de huidige gebruiker van de pc opvragen. Als je met dat gegeven iets wilt doen, dan zul je daar dus andere acties aan vast moeten knopen. Bijvoorbeeld: een tabel maken met de namen van de mensen die de db mogen gebruiken, en/of bij de formulieren die ze mogen openen een check doen op basis van die inloggegevens.
Het voordeel van een extra tabel met inloggegevens is dat je de gebruikers kunt controleren op basis van een wachtwoord. Met Environ lees je alleen maar wie de pc heeft aangezet, verder doe je er dus niks mee.
Wat wil je dus eigenlijk bereiken met de inlognaam?
 
Hoi,

Het volgende bestand heb ik tot zover af.
bij het inloggen haal hij de naam op via de module uit de tabel.
Het is alleen een welkomsscherm, dit werkt.
Enkel als hij geen naam kan ophalen omdat de naam niet bij de gebruikerstabel staat moet hij nog een melding geven: geen toegang tot dit programma.
Ik heb daarvoor de volgende code:
Code:
Private Sub Form_Open(Cancel As Integer)
If IsNull(Me.cbonaam) Then
MsgBox "Geen toegang tot dit programma'"
DoCmd.Close acForm, "aanmeldingsvenster", acSaveNo
End If
End Sub
Alleen, nu wil ik liever dat heel access sluit. en niet het formulier.

Volgende stap:
in de tabel met gebruikers heb ik ook een letter geplaats in de kolom rechten.
Je kan dan toch zeggen bij letter A mag je dit wel zien en bij letter G mag je dat zien.
i.c.m. de if functie.

als voorbeeld had ik 2 knoppen op het blad introductiescherm gezet om een knop te verbergen voor een bepaalde gebruiker.

Precies weet ik niet hoe dit moet aanpakken.


Zie bijlage
 

Bijlagen

Laatst bewerkt:
Hier kom je wel weer wat verder mee...
Overigens kun je de applicatie makkelijk sluiten bij een verkeerde login met de actie Application.Quit
 

Bijlagen

Ja precies geweldig!

Zo bedoel ik, waarom ik het zo wil is dat mensen anders weer een wachtwoord moeten bewaren. De ingelogde gebruiker is verantwoordelijk voor het gebruik van zijn PC.

Echter dit stukje:

Code:
Function FnUserInt()
Dim UserTemp As Variant
UserTemp = DLookup("[UserInitials]", "USERS", "[UserLogonName] = FnUser()")
FnUserInt = UserTemp
End Function

heb je vervangen door:

Code:
Public Function FnUserInt() As String
On Error GoTo GeenUser

    FnUserInt = DLookup("[UserInitials]", "USERS", "[UserLogonName] = '" & Fnuser & "'")
    Exit Function

GeenUser:
FnUserInt = "n.b."

End Function


Public Function FnUserSec() As String
On Error GoTo GeenUser

    FnUserSec = DLookup("[Beveiliging]", "USERS", "[UserLogonName] = '" & Fnuser & "'")
    Exit Function

GeenUser:
FnUserSec = "n.b."

End Function

Ik zie het het verschil, alleen dat hij GeenUser neer zet als er geen gebruik is.
 
Ik heb de DLookup inderdaad een beetje uitgebreid, en ook aangepast.
De aanpassing is een logische (vind ik). In jouw formule laat je de UserId ophalen binnen de DLookup.
Code:
UserTemp = DLookup("[UserInitials]", "USERS", "[B][UserLogonName] = FnUser()[/B]").
Dit werkt wel, zoals je hebt gemerkt, maar maakt de DLookup nog wat trager dan-ie al is.
In mijn formule
Code:
FnUserSec = DLookup("[Beveiliging]", "USERS", "[UserLogonName] = '" & Fnuser & "'")
wordt de Userlogin naam toegevoegd aan de Dlookup. Hij wordt a.h.w. eerst opgehaald, en de uitkomst in de DLookup gezet. Dat werkt sneller.
Er staan extra quootjes bij, omdat je een Tekstwaarde opzoekt.
Een laatste (niet onbelangrijke) verandering is, dat ik de opgezochte waarde meegeef aan de functie-aanroep. Dat gebeurt in de regel
Code:
Public Function FnUserInt() As String
Alleen een functie maken, zoals je zelf hebt gedaan, doet niet zo heel veel; je wilt met de functie een waarde opzoeken. Dat doet mijn variant dus, en die uitkomst wordt in de variabele FnUserInt gezet. Je krijgt dus altijd een tekst terug als je de functie aanroept.
Vandaar ook een extra Foutroutine; als DLookup niks kan vinden, zou je een foutmelding terugkrijgen. In de functie springt de cursur dan naar de Foutroutine, en zet de tekst "n.b." in de variabele. Je kunt die waarde verder gebruiken om bijvoorbeeld de db te sluiten.
Duidelijker zo?
 
Helder ;):cool::o

Ik wist niet dat de DLookup trager zou worden als je hier meerdere dingen in laat ophalen.

Probleem is hierbij opgelost!
 
Als je een zware db hebt, dan zou je nog kunnen overwegen om de DLookup te vervangen door een Recordset. Maar dat is denk ik voor later order...
 
Morgen,

Inmiddels heb ik 3 groepen:
Administrator, hoofdgebruiker, minigebruiker.

Gebruikers:
Henk - Administrator
Piet - Hoofdgebruiker
Truus - Minigebruiker

De rechten werken allemaal alleen zit ik met het volgende te stoeien.
Op elke bestelling die er wordt gedaan komt er een naam te staan via een keuzemenu.
Henk, Piet of Truus.

Deze bestellingen staan in een query.
Echter Piet en Truus zien alle bestellingen.

Ik wil het graag zo in de query:
Henk (Administrator) kan alle bestellingen zien.
Piet (hoofdgebruiker) mag alleen zijn eigen bestellingen zien en die van Truus (minigebruiker).
En Truus mag alleen haar bestellingen zien.

Nu heb ik in de Query al de voorwaarde = FnUser gebruikt.
Echter dit werkt niet en dat is ook niet wat het moet zijn.

Hebben jullie een idee in gedachten.

Voor de duiderlijkheid elke bestelling komt op een apart record (formulier) deze wordt weggeschreven naar de tabel en query.
 
Laatst bewerkt:
Hier kom je wel weer wat verder mee...
Overigens kun je de applicatie makkelijk sluiten bij een verkeerde login met de actie Application.Quit

Ik ben ook opzoek naar een login module, alleen als ik deze bekijk, dan is er geen verschil als je inlogt als gebruiker, admin of een naam die niet eens in de tabel staat.

Kan het zijn dat het probleem is omdat ik Access 2007 heb?
 
Dat kan wel eens kloppen. In de functie Fnuser() wordt gebruik gemaakt van environ("UserName"). Volgens mij wordt environ("UserName") niet ondersteund door Access 2007.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan