以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]自定义登录窗口及窗口控件权限  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174264)

--  作者:lgj716330
--  发布时间:2022/1/8 9:43:00
--  [求助]自定义登录窗口及窗口控件权限
在自定义登录窗口的确定按钮中写了以下代码来控制窗口控件的权限
For Each frm As WinForm.Form In Forms
For Each c As Winform.Control In frm.Controls
    c.Enabled = True
Next
Next
    For Each dr11 As DataRow In DataTables("窗口控件权限表").DataRows
        If dr11.IsNull("角色") = False Then
        Dim nms() As String = dr11("角色").Split(",")
        For Each nm As String In nms
            If nm.length>0 Then
                If _UserRoles.contains(nm) Then
                    For Each dr As DataRow In DataTables("窗口控件权限表").Select("角色 like \'%" & nm & "%\'")
                    If dr.isnull("控件名称")=False Then
                        Forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = Not dr("不可用")
                    End If
                    Next
                End If
            End If
        Next
        End If
    Next

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20220108094154.png
图片点击可在新窗口打开查看

登录的时候总提示以下错误

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20220108094159.jpg
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2022/1/8 10:23:00
--  
这种用法应该放到每个窗口的afterload,窗口打开后在设置控件权限。窗口没有打开,里面的控件都是无法使用和设置的
--  作者:lgj716330
--  发布时间:2022/1/9 19:46:00
--  
我改成了自定义函数,然后在相关窗口中引用,Functions.Execute("ckkj",e.Form)
Dim frm As WinForm.Form =args(0)
    For Each dr11 As DataRow In DataTables("窗口控件权限表").DataRows
        If dr11.IsNull("角色") = False Then
        Dim nms() As String = dr11("角色").Split(",")
        For Each nm As String In nms
            If nm.length>0 Then
                For Each dr As DataRow In DataTables("窗口控件权限表").Select("角色 like \'%" & nm & "%\'")
                    If _UserRoles.contains(nm) Then
                        If dr.Isnull("窗口名称")=False And dr.Isnull("控件名称")=False And dr("不可用") = True Then
                            forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = False
                        End If
                    End If
                Next
            End If
        Next
        End If
    Next
在显示自定义用户登录窗口之前提示下面的错误,但进入系统后权限控制是有效的

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20220109194114.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2022/1/9 20:40:00
--  
既然的窗口里使用,就应该只查询这个窗口的数据即可。应该是根据登录的用户的角色和当前使用的窗口作为条件查询权限表,而不是遍历权限表所有在逐行判断。

逐行判断也就罢了,大不了效率低而已,但是却没有判断是否当前窗口的权限,这样其他没有打开的窗口也用上了,当然会出错

--  作者:lgj716330
--  发布时间:2022/1/11 9:07:00
--  
我直接在相关窗口的AfterLoad中写下面代码,发现当多个窗口中使用下面代码的时候,打开项目显示自定义用户登录窗口前也会出现上面的错误,只有一个窗口不会有错误提示
Dim nms() As String = _UserRoles.Split(",")
For Each nm As String In nms
    If nm.length>0 Then
        For Each c As object In e.form.controls
            Dim dr As DataRow
            dr = DataTables("窗口控件权限表").Find("角色 like \'%" & nm & "%\' and 窗口名称 = \'" & e.Form.name & "\' and 控件名称 = \'" & c.name & "\'")
            If dr IsNot Nothing Then
                forms(dr("窗口名称")).Controls(dr("控件名称")).Enabled = False
            End If
        Next
    End If
Next

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20220111091221.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2022/1/11 9:12:42编辑过]

--  作者:有点蓝
--  发布时间:2022/1/11 9:32:00
--  
        For Each c As object In e.form.controls
            Dim dr As DataRow
            dr = DataTables("窗口控件权限表").Find("角色 like \'%" & nm & "%\' and 窗口名称 = \'" & e.Form.name & "\' and 控件名称 = \'" & c.name & "\'")
            If dr IsNot Nothing Then
msgbox(dr("窗口名称") & "," & dr("控件名称"))
                e.form.Controls(dr("控件名称")).Enabled = False
msgbox(1) \'如果这里弹不出,看看之前弹出的是什么窗口和控件
            End If
        Next

--  作者:lgj716330
--  发布时间:2022/1/11 11:30:00
--  
打开项目出现自定义用户登录窗口前会跳出以下窗口。我目前仅两个窗口在测试,然后第一个窗口会正常跳出msgbox信息,代码也是有效的,第二个窗口即下面显示的窗口2没有任何提示,代码是无效的。

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20220111091221.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2022/1/11 11:33:54编辑过]

--  作者:有点蓝
--  发布时间:2022/1/11 11:38:00
--  
窗口不要设置为自动打开
--  作者:lgj716330
--  发布时间:2022/1/11 11:43:00
--  
不自动打开是不会有跳出错误提示,但在项目中点击应用窗口时也是会跳出错误提示。偿试了在没用自定义用户登录的项目中是没有问题的
[此贴子已经被作者于2022/1/11 11:44:01编辑过]

--  作者:有点蓝
--  发布时间:2022/1/11 11:43:00
--  
请上传实例说明