Foxtable(狐表)用户栏目专家坐堂 → 加载树越权问题,请教。


  共有2944人关注过本帖树形打印复制链接

主题:加载树越权问题,请教。

帅哥哟,离线,有人找我吗?
jq_shang
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
加载树越权问题,请教。  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2019/1/17 21:05:00 [只看该作者]

在用户自定义菜单中,修改加载树代码么?
不行呀,在SHOWLOADTREE 下面,CLICK事件只有一句代码:
MainTable.OpenLoadTree()
对于这棵树本身的点击操作,没有下文了,所以,感觉无法对它进行代码处理。
[此贴子已经被作者于2019/1/17 21:10:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:217 积分:1646 威望:0 精华:0 注册:2018/1/21 10:25:00
  发帖心情 Post By:2019/1/17 21:20:00 [只看该作者]

好的好的,谢谢甜甜版主!

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/2/12 16:34:00 [只看该作者]

甜版:
        beforeLoad事件,在按下Ctrl键时彻底失效,导致内置的加载树对用户来说彻底成为摆设。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/12 16:42:00 [只看该作者]

 

我测试beforeload事件有效哦,贴出你所写的代码。

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By: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键时,可以选择任何人。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/13 9:21:00 [只看该作者]

试试

 

ElseIf lfl>"" andalso e.DataTable.LoadFilter.IndexOf(lfl) < 0 Then

 

改成

 

ElseIf lfl>"" Then

 

最后,你弹出msgbox(e.datatable.loadfilter)看看,你合成的条件不对。


 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/2/13 10:07:00 [只看该作者]

谢谢甜版,问题解决。
看来帮助文档还是不够严密。即使不按下ctrl键,e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl 也是不严密的,应改为:
e.DataTable.LoadFilter = "(" & e.DataTable.Loadfilter & ") And (fl & ")"

 回到顶部