以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 加载树越权问题,请教。 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=130282) |
-- 作者:jq_shang -- 发布时间:2019/1/17 20:28:00 -- 加载树越权问题,请教。 员工管理系统。按照不同用户,设置了权限,项目启动后,用户只能加载本部门员工信息。正常。 用户自定义菜单里不想屏蔽加载树。问题来啦,加载树出马,立即破坏了加载权限限制。问,如何限制加载树篡权? 在biforeloadoutertable中,加入代码如下: Select Case e.DataTablename Case "个人持证情况表","员工职称表","员工基础表","部门表" e.SelectString = "Select * Fro m {" & e.DataTablename & "} Where [_Identify] Is Null" End Select 在aftoropenproject中,加入代码如下: If user.Type = UserTypeEnum.User Then If _userjibie = "二级" DataTables("员工基础表").loadfilter = "[二级] = \'" & _Usergroup & "\'" DataTables("员工基础表").load DataTables("部门表").loadfilter = "[二级] = \'" & _Usergroup & "\'" DataTables("部门表").load else ^ ..... end if end if 这样根据用户级别、分组,就可以加载不同部门的员工信息。 但是,菜单加载树无法限制。 在表事件中, beforeload中加入限制代码,出现了错误,项目不启动了,疑似死循环? 不敢乱来了,所以提问。 [此贴子已经被作者于2019/1/17 20:59:44编辑过]
|
-- 作者:jq_shang -- 发布时间:2019/1/17 21:05:00 -- 在用户自定义菜单中,修改加载树代码么? 不行呀,在SHOWLOADTREE 下面,CLICK事件只有一句代码: MainTable.OpenLoadTree() 对于这棵树本身的点击操作,没有下文了,所以,感觉无法对它进行代码处理。
[此贴子已经被作者于2019/1/17 21:10:34编辑过]
|
-- 作者:有点甜 -- 发布时间:2019/1/17 21:07:00 -- beforeLoad事件处理
http://www.foxtable.com/webhelp/scr/2057.htm
或者,隐藏加载树菜单,自己生成加载树
http://www.foxtable.com/webhelp/scr/2022.htm
http://www.foxtable.com/webhelp/scr/2054.htm
|
-- 作者:jq_shang -- 发布时间:2019/1/17 21:20:00 -- 好的好的,谢谢甜甜版主! |
-- 作者:shenyl0211 -- 发布时间:2019/2/12 16:34:00 -- 甜版: beforeLoad事件,在按下Ctrl键时彻底失效,导致内置的加载树对用户来说彻底成为摆设。
|
-- 作者:有点甜 -- 发布时间:2019/2/12 16:42:00 --
我测试beforeload事件有效哦,贴出你所写的代码。
|
-- 作者:shenyl0211 -- 发布时间:2019/2/13 0:27:00 -- Dim lfl As String Select Case e.DataTable.name Case "考勤管理" Select Case _userroles Case "一般人员" lfl="项目经理 =\'" & _username & "\' or 姓名 =\'" & _username & "\'" Case "公司领导","担保管理","产值管理","物业管理" lfl="姓名 =\'" & _username & "\'" Case "部门干事","部门会计","部门领导","财务领导","生产领导","合同管理","体系管理" lfl="部门名称 In (" & _usergroup & ")" Case "审核人员","开发者","管理者" lfl="" End Select Case Else Return End Select If e.DataTable.LoadFilter = "" Then e.DataTable.LoadFilter = lfl ElseIf lfl>"" andalso e.DataTable.LoadFilter.IndexOf(lfl) < 0 Then e.DataTable.LoadFilter = "(" & e.DataTable.Loadfilter & ") And (" & lfl & ")" End If 考勤管理表有年度、月份、姓名,并按此分组加载,当没按下Ctrl键时,确实不能选择别人,只能选择自己,但当按下Ctrl键时,可以选择任何人。
|
-- 作者:有点甜 -- 发布时间:2019/2/13 9:21:00 -- 试试
ElseIf lfl>"" andalso e.DataTable.LoadFilter.IndexOf(lfl) < 0 Then
改成
ElseIf lfl>"" Then
最后,你弹出msgbox(e.datatable.loadfilter)看看,你合成的条件不对。 |
-- 作者:shenyl0211 -- 发布时间:2019/2/13 10:07:00 -- 谢谢甜版,问题解决。 看来帮助文档还是不够严密。即使不按下ctrl键,e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " &
fl 也是不严密的,应改为: e.DataTable.LoadFilter = "(" & e.DataTable.Loadfilter & ") And (" & fl & ")"
|