Hallo zusammen.
Ich bin grad dabei meiner Anwendung eine Überarbeitung zu verpassen. Beim Start meldet sich ein User an.
Bisher hab ich das über ein Public Module gelöst
Spoiler anzeigen
Irgendwie hab ich aber im Gefühl, dass zumindest die Properties in eine Klasse gehören. In etwa so:
Dann könnte ich doch sicher beim Anwendungsstart nach erfolgreicher Anmeldung einen
gibt's da was sinnvolleres?
Ich bin grad dabei meiner Anwendung eine Überarbeitung zu verpassen. Beim Start meldet sich ein User an.
Bisher hab ich das über ein Public Module gelöst
VB.NET-Quellcode
- Imports System.Runtime.CompilerServices
- Public Module UserAccess
- #Region "Properties"
- 'Benutzerbezogene Properties
- Public Property _UA_UserID As Integer
- Public Property _UA_UserName As String
- Public Property _UA_rwUser As BenutzerRow
- Public Property _UA_MitarbeiterFullname As String
- Public Property _UA_MitarbeiterID As Integer
- Public Property _UA_MitarbeiterFunktion As String
- Public Property _UA_rwMitarbeiter As MitarbeiterRow
- Public Property _UA_IsAdmin As Boolean
- Public Property _UA_IsZentrale As Boolean
- Public Property _UA_GesellschaftName As String
- Public Property _UA_GesellschaftID As Integer
- Public Property _UA_GesellschaftNr As Integer
- Public Property _UA_Auswertekennzeichen As String
- Public Property _UA_rwStandort As StandortRow
- Public Property _UA_StandortName As String
- Public Property _UA_standortID As Integer
- Public Property _UA_UsernameAndStandort As String
- Public Property _UA_CanShowGehalt As Boolean = False
- Public Property _UA_CanEditGehalt As Boolean = False
- Public Property _UA_CanShowBonus As Boolean = False
- Public Property _UA_CanEditBonus As Boolean = False
- 'Default-Einträge
- Public Property _DefVal_GesellschaftName As String = "<keine Angabe>"
- Public Property _DefVal_StandortName As String = "<keine Angabe>"
- Public Property _DefVal_FzgKennzeichen As String = "<KEINE ANGABE>"
- Public Property _DefVal_TourArt As String = "<keine Angabe>"
- Public Property _DefVal_TourNr As Integer = 0
- Public Property _DefVal_TourName As String = "<keine Angabe>"
- Public Property _DefVal_MitarbeiterName As String = "<keine Zuordnung>"
- Public Property _DefVal_Date As Date = Date.Parse("01.01.1900")
- Public Property _DefVal_TourGebiet As String = "<keine Angabe>"
- Public Property _DefVal_UserName As String = "<keine Angabe>"
- '
- Public Property _frmTourenplan_SetYear As Integer = 0
- Public Property _frmTourenplan_StandortID As Integer = 0
- #End Region 'Properties
- #Region "AccessSettings"
- ''' <summary> sorgt dafür, dass für jede MitarbeiterFunktion jede TreeRow angelegt wird. Ist die Freigabe im Tree False wird die DefaultRow gelöscht.</summary>
- Public Sub EnsureValidAccessDefaults()
- Dim rwAnsichtDefault = Dts.Ansicht.First(Function(x) x.Typ = "kein Zugriff")
- For Each rwMaFunc In Dts.MitarbeiterFunktion
- For Each rwTree In Dts.Tree
- If rwTree.Freigabe Then
- If Dts.AccessDefault.Where(Function(x) x.MitarbeiterFunktionRow Is rwMaFunc AndAlso x.TreeRow Is rwTree).Count = 0 Then 'noch nicht vorhanden
- Dts.AccessDefault.AddAccessDefaultRow(rwMaFunc, rwTree, False, False, False, False, False, False, rwAnsichtDefault, Date.Now, "automatische Neuanlage", _UA_UsernameAndStandort)
- End If
- Else 'freigabe wurde entfernt. wenn noch eine AccessDefault-Row dazu da ist, dann diese löschen
- Dim rw = Dts.AccessDefault.All.FirstOrDefault(Function(x) x.MitarbeiterFunktionRow Is rwMaFunc AndAlso x.TreeRow Is rwTree)
- If rw IsNot Nothing Then rw.Delete()
- End If
- Next
- Next
- End Sub
- Public Sub SyncAllUsers()
- Dim counter = 0
- For Each rwUser In Dts.Benutzer
- For Each rwTree In Dts.Tree
- If rwTree.Freigabe Then
- Dim defRow = Dts.AccessDefault.First(Function(x) x.MitarbeiterFunktionRow Is rwUser.MitarbeiterRow.MitarbeiterFunktionRow AndAlso x.TreeRow Is rwTree)
- If Dts.AccessSetting.Where(Function(x) x.BenutzerRow Is rwUser AndAlso x.TreeRow Is rwTree).Count = 0 Then
- If Not rwUser.Admin Then
- Dts.AccessSetting.AddAccessSettingRow(rwUser, rwTree, defRow.Zugriff, defRow.Neu, defRow.Bearbeiten, defRow.MultiEdit, defRow.FastEdit, defRow.Loeschen, defRow.AnsichtRow, defRow, Date.Now, "Migrierung", "Anwendung")
- Else
- Dts.AccessSetting.AddAccessSettingRow(rwUser, rwTree, True, True, True, True, True, True, Dts.Ansicht.First(Function(x) x.Typ = "Alles"), defRow, Date.Now, "Migrierung", "Anwendung")
- End If
- counter += 1
- End If
- End If
- Next
- Next
- msgInformation($"{counter} Berechtigungen wurden angelegt.")
- End Sub
- #Region "Rechteprüfung"
- ''' <summary> Gibt zurück, ob User neue Einträge erstellen darf </summary>
- Public Function hasCreateNewAccess(appMod As String) As Boolean
- Return Dts.AccessSetting.First(Function(x) x.BenutzerRow Is _UA_rwUser AndAlso x.TreeRow.Key = appMod).Neu
- End Function
- ''' <summary> Gibt zurück, ob User bearbeiten darf </summary>
- Public Function hasEditEntryAccess(appMod As String) As Boolean
- Return Dts.AccessSetting.First(Function(x) x.BenutzerRow Is _UA_rwUser AndAlso x.TreeRow.Key = appMod).Bearbeiten
- End Function
- ''' <summary> Gibt zurück, ob User Schnelländerung(MultiEdit) benutzen darf </summary>
- Public Function hasMultiEditAccess(appMod As String) As Boolean
- Return Dts.AccessSetting.First(Function(x) x.BenutzerRow Is _UA_rwUser AndAlso x.TreeRow.Key = appMod).MultiEdit
- End Function
- ''' <summary> Gibt zurück, ob User Schnellbearbeitung(FastEdit) benutzen darf </summary>
- Public Function hasFastEditAccess(appMod As String) As Boolean
- Return Dts.AccessSetting.First(Function(x) x.BenutzerRow Is _UA_rwUser AndAlso x.TreeRow.Key = appMod).FastEdit
- End Function
- ''' <summary> Gibt zurück, ob User zum Löschen berechtigt ist </summary>
- Public Function hasDeleteAccess(appMod As String) As Boolean
- Return Dts.AccessSetting.First(Function(x) x.BenutzerRow Is _UA_rwUser AndAlso x.TreeRow.Key = appMod).Loeschen
- End Function
- Public Function UserView(appMod As String) As String
- Return Dts.AccessSetting.First(Function(x) x.BenutzerRow Is _UA_rwUser AndAlso x.TreeRow.Key = appMod).AnsichtRow.Typ
- End Function
- ''' <summary> Gibt zurück, ob User "Admin" oder "Zentrale" ist </summary>
- Public Function isSuperUser() As Boolean
- If _UA_IsAdmin Then Return True
- If _UA_IsZentrale Then Return True
- Return False
- End Function
- #End Region 'Rechteprüfung
- #End Region 'AccessSettings
- #Region "Login"
- ''' <summary> Setzt nach erfolgreicher Anmeldung auf dlgLogin die ganzen Userdetails </summary>
- <Extension>
- Public Sub setUser(user As String)
- registerUserDetails(user)
- My.Settings.ActiveUser = _UA_UserID
- End Sub
- Private Sub registerUserDetails(user As String)
- _UA_rwUser = Dts.Benutzer.First(Function(x) x.Benutzername = user)
- _UA_UserID = _UA_rwUser.ID
- _UA_UserName = _UA_rwUser.Benutzername
- _UA_GesellschaftName = _UA_rwUser.expGesellschaft
- _UA_GesellschaftID = Dts.Gesellschaft.First(Function(x) x.Name = _UA_GesellschaftName).ID
- _UA_GesellschaftNr = convertInteger(Dts.Gesellschaft.First(Function(x) x.Name = _UA_GesellschaftName).Nr)
- _UA_MitarbeiterFullname = _UA_rwUser.expFullname
- _UA_MitarbeiterID = _UA_rwUser.MitarbeiterID
- _UA_MitarbeiterFunktion = _UA_rwUser.expFunktion
- _UA_IsAdmin = _UA_rwUser.Admin
- _UA_IsZentrale = _UA_rwUser.Zentrale
- _UA_Auswertekennzeichen = Dts.Gesellschaft.First(Function(x) x.Name = _UA_GesellschaftName).auswKZ
- _UA_rwMitarbeiter = Dts.Mitarbeiter.First(Function(x) x.ID = _UA_MitarbeiterID)
- _UA_CanShowGehalt = _UA_rwMitarbeiter.flagGehaltEinsehen
- _UA_CanEditGehalt = _UA_rwMitarbeiter.flagGehaltAnpassen
- _UA_CanShowBonus = _UA_rwMitarbeiter.flagSonderzahlungEinsehen
- _UA_CanEditBonus = _UA_rwMitarbeiter.flagSonderzahlungAnpassen
- _UA_rwStandort = _UA_rwMitarbeiter.StandortRow
- _UA_StandortName = _UA_rwStandort.Name
- _UA_standortID = _UA_rwStandort.ID
- _UA_UsernameAndStandort = $"{_UA_MitarbeiterFullname} | {_UA_StandortName}"
- End Sub
- Public Function userExist(username As String) As Boolean
- For Each rwUser In Dts.Benutzer
- If rwUser.Benutzername = username Then Return True
- Next
- Return False
- End Function
- #End Region 'Login
- End Module
Irgendwie hab ich aber im Gefühl, dass zumindest die Properties in eine Klasse gehören. In etwa so:
Dann könnte ich doch sicher beim Anwendungsstart nach erfolgreicher Anmeldung einen
New AppUser
und dessen Properties Anwendungsweit nutzen odergibt's da was sinnvolleres?
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"