如何在vb.net中设置各个表单的用户访问权限?
下面我为每个表单创建了程序代码
USERACCESS
有没有一种方法无需创建每个表单,以便我可以将其安排在一个模块或类中,或者如果我的代码有问题,请指导我
谢谢
模块程序中的代码
Friend Module Program
Public Userinformation As DTOUsers 'stores current rolename when they login.
''' <summary>
''' The main entry point for the application.
''' </summary>
<STAThread>
Public Sub Main()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New frmLoginRegister())
End Sub
End Module
登录表单中的代码
Public Class frmLoginRegister
Private uService As New UserService()
Private Sub BtnLogin_Click(sender As Object, e As EventArgs) Handles BtnLogin.Click
'add dapper logics here
Dim users = uService.GetDTOUsersByUsername(txtUsername.Text)
If users.Username = txtUsername.Text AndAlso users.Password = txtPassword.Text Then
Program.Userinformation = users
MessageBox.Show("Successfull, Welcome " & users.RoleName)
Me.ShowInTaskbar = False
Me.Hide()
Call (New FrmMain()).ShowDialog()
Environment.Exit(0)
Else
MessageBox.Show("Invalid Login details")
End If
End Sub
End Class
模块用户信息中的代码
Public Module UserInformation
Public UserName As String
Public Password As String
Public RoleId As Integer
Public RoleName As String
End Module
主窗体中的代码
Public Class FrmMain
Private Sub Button2BtnShowform2_Click(sender As Object, e As EventArgs) Handles BtnShowform2.Click
Dim frm As New Form2()
frm.ShowDialog()
End Sub
Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ToolUsername.Text = Program.Userinformation.RoleName
End Sub
Private Sub BtnShowform3_Click(sender As Object, e As EventArgs) Handles BtnShowform3.Click
Dim frm As New Form3()
frm.ShowDialog()
End Sub
End Class
表格2中的代码
Public Class Form2
Private Sub USERACCESS()
Dim username = Program.Userinformation.RoleName
If username = "Admin" Then
DataGridView1.Columns("colDel").Visible = False
End If
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
USERACCESS()
End Sub
End Class
FORM3 中的代码
Public Class Form3
Private Sub USERACCESS()
Dim username = Program.Userinformation.RoleName
If username = "Admin" Then
DataGridView1.Columns("colDel").Visible = False
End If
End Sub
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
USERACCESS()
End Sub
End Class
更新代码信息类模型
Public Class DTOUsers
Public Property RoleID() As Integer
Public Property Username() As String
Public Property Password() As String
Public Property RoleName() As String
End Class
更新代码信息方法服务
Public Class UserService
Public Function GetDTOUsersByUsername(ByVal Username As String) As DTOUsers
Dim sql = $"SELECT * FROM Users INNER JOIN Role ON Users.Roleid = Role.Roleid where Username ='{Username}'"
Using _conn = New OleDbConnection(GetOledbConnectionString())
Return _conn.Query(Of DTOUsers)(sql).FirstOrDefault()
End Using
End Function
End Class
表格主
这里有很多错误,所以评论是不够的。
您正在从数据存储(数据库?)中检索用户密码,然后将其与
txtPassword
中的值进行比较。由于以下几个原因,这并不安全:
相反,您应该以最小的方式对密码进行哈希处理,并将哈希后的密码存储在数据存储中。然后,您将用户 ID 和在
txtPassword
中输入的密码的哈希值传递到数据库并确定它们是否匹配,以进行 身份验证。
您已发布此代码:
Friend Module Program
Public Userinformation As DTOUsers 'stores current rolename when they login.
' Snipped
End Module
您没有发布
DTOUsers
的代码定义。相反,您有一个包含四个独立的、不相关的全局变量的模块,这似乎是您在 DTOUsers 中想要的:
Public Module UserInformation
Public UserName As String
Public Password As String
Public RoleId As Integer
Public RoleName As String
End Module
你有
DTOUsers
的定义吗?你有Option Strict On
吗?您需要为Class
定义一个DTOUsers
,没有密码:
Public Class UserDTO
Public UserName As String
Public RoleId As Integer
Public RoleName As String
End Module
注意:只有当用户在应用程序中仅限于一个角色时,这才有效。
您还有未发布的代码。例如,这一行...
Dim users = uService.GetDTOUsersByUsername(txtUsername.Text)
...调用
uService.GetDTOUsersByUsername
,但我们不知道返回类型。您还声明了没有类型的 users
,因此我们甚至无法推断返回类型。
假设所有用户代码都已修复并正常工作,UserDTO 中填充了角色 ID 和角色名称,那么您需要做几件事。