以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  加载树越权问题,请教。  (http://www.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 & ")"