VB.NET如何阻止标准用户选择ComboBox中的SPECIAL LEAVE选项
实现方案
直接把特殊假别的权限校验加到现有ErrorFree()校验函数里就行,所有提交前的校验逻辑放一块,后续维护也方便,不用在按钮点击事件里零散写判断。
1. 补充提交时的权限校验
在原有下拉框非空判断的后面,加一段角色和选中值的联合判断:非管理员账号选中SPECIAL LEAVE时直接返回校验失败,弹出提示阻止提交。
修改后的ErrorFree()完整代码:
Private Function ErrorFree() As Boolean If lblEmpNO.Text = "" Then DisplayMessage("error", "ERROR", "请选择员工编号!") Return False Exit Function End If If lblemployeename.Text = "" Then DisplayMessage("error", "ERROR", "请选择员工编号!") Return False Exit Function End If If lbldepartment.Text = "" Then DisplayMessage("error", "ERROR", "请选择员工编号!") Return False Exit Function End If If cmbReason.SelectedIndex = -1 Then DisplayMessage("error", "ERROR", "请选择请假原因!") Return False Exit Function End If ' 新增:标准用户无特殊假期申请权限校验 If Not User.IsInRole("Admin") AndAlso cmbReason.Text = "SPECIAL LEAVE" Then DisplayMessage("error", "权限不足", "标准用户无法申请SPECIAL LEAVE,请联系管理员处理!") Return False Exit Function End If Return True End Function
这里用
AndAlso做短路判断,先校验角色再读取下拉框值,不会出现多余的逻辑判断;如果SPECIAL LEAVE对应的leave_code是固定值,建议把判断条件换成cmbReason.Value = "对应编码",比判断文本更稳定,后续修改选项显示文本不会导致校验失效。
2. 可选体验优化:加载下拉框时直接对普通用户隐藏受限选项
用户体验更好的做法是不用等用户选完点提交才报错,在loadcmbReason()绑定下拉数据源的时候,直接把普通用户不能选的SPECIAL LEAVE项过滤掉:
Private Sub loadcmbReason() Dim strLeavetype As String = "SELECT leave_type,leave_code FROM leave_types WHERE others = 'Y' AND `status` = 'Y' ORDER BY id ASC" Dim dt As New DataTable Try myconn.OpenConnection() myconn.FillDataTable(dt, strLeavetype) myconn.CloseConnection() ' 非管理员用户移除特殊假期选项 If Not User.IsInRole("Admin") Then Dim targetRows = dt.Select("leave_type = 'SPECIAL LEAVE'") For Each row In targetRows dt.Rows.Remove(row) Next dt.AcceptChanges() End If cmbReason.TextField = "leave_type" cmbReason.ValueField = "leave_code" cmbReason.DataSource = dt cmbReason.DataBind() Catch ex As Exception myconn.CloseConnection() End Try End Sub
注意:UI层的选项隐藏只是体验优化,提交环节的校验必须保留,防止用户通过本地调试修改控件值、伪造请求等方式绕过限制。
之所以不把这段判断写到btnSubmit的点击事件里,是因为现有代码已经把所有提交合法性校验都统一放在ErrorFree()里,新增的权限校验本身就属于提交合法性判断的一部分,放在统一入口维护能避免后续改逻辑时漏加判断,出现权限漏洞。
内容的提问来源于stack exchange,提问作者Una O Lian
相关产品推荐
相关产品推荐

