以文本方式查看主题 - 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 登录的时候总提示以下错误 |
-- 作者:有点蓝 -- 发布时间: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 在显示自定义用户登录窗口之前提示下面的错误,但进入系统后权限控制是有效的 |
-- 作者:有点蓝 -- 发布时间: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
[此贴子已经被作者于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没有任何提示,代码是无效的。 [此贴子已经被作者于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 -- 请上传实例说明 |