以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  按用户部门权限从后台追载相应表数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123031)

--  作者:weibu
--  发布时间:2018/8/6 23:28:00
--  按用户部门权限从后台追载相应表数据
我想通过判断登录系统的用户,如果登录用户职位为“管理者”从部门信息中遍历他的当前部门和下属部门并进行加载。如果登录用职位为“职员”仅 追载他的当前部门即可,不追载下属部门。
下面代码麻烦帮忙看下是否能够实现

Dim dr As DataRow = DataTables("用户信息").find("用户名 = \'" & 用户名 & "\'")  \'找到当前登录者所在的行
Dim sy As DataRow
Dim Filter As String
If dr("职位") = "管理者" Then
Dim cjs As New List(Of String) \'定义层级数组
cjs = DataTables("部门信息").GetValues("层级")
For Each cj As String In cjs 
      If  cj.ContainsValue("dr("层级")") = True Then   \'找到登录者的下属部门
       sy = DataTables("部门信息").SQLFind("[层级] = \'" & cj & "\'")  \'找出下属部门载部门信息所在的行
       Filter = "当前所在部门 = \'" & sy("所属部门") & "\' And 是否可用 = 1"
       \'DataTables("溯源码").LoadFilter = Filter
       \' DataTables("溯源码").Load()
       DataTables("溯源码").AppendLoad (Filter, False)
       End If
Next
     Else If dr("职位") = "职员" Then
     Filter = "当前所在部门 = \'" & dr("所属部门") & "\'"
     DataTables("溯源码").AppendLoad (Filter, False)
     End If
End If

“用户信息”表

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180806232638.png
图片点击可在新窗口打开查看
“部门管理”表

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


[此贴子已经被作者于2018/8/6 23:34:11编辑过]

--  作者:有点甜
--  发布时间:2018/8/7 9:20:00
--  
Dim dr As DataRow = DataTables("用户信息").find("用户名 = \'" & 用户名 & "\'")  \'找到当前登录者所在的行
If dr("职位") = "管理者" Then
    Dim drs = DataTables("部门信息").Select("层级 like \'" & dr("层级") & "%\'")
    Dim filter As String = "1=2"
    For Each cdr As DataRow In drs
        Filter &= " or 当前所在部门 = \'" & cdr("所属部门") & "\' And 是否可用 = 1"
    Next
    DataTables("溯源码").AppendLoad (Filter, False)
Else If dr("职位") = "职员" Then
    dim Filter = "当前所在部门 = \'" & dr("所属部门") & "\'"
    DataTables("溯源码").AppendLoad (Filter, False)
End If

--  作者:weibu
--  发布时间:2018/8/7 9:47:00
--  
当是管理者的时候执行结果与职员相同,老师是不是代码上有问题?
测试数据我已检查了,没有问题
代码我是没看出什么问题,还得麻烦您
[此贴子已经被作者于2018/8/7 10:35:44编辑过]

--  作者:有点甜
--  发布时间:2018/8/7 10:39:00
--  

上传实例测试。

 

Dim dr As DataRow = DataTables("用户信息").find("用户名 = \'" & 用户名 & "\'")  \'找到当前登录者所在的行
Dim filter As String = "1=2"
If dr("职位") = "管理者" Then
    Dim drs = DataTables("部门信息").Select("层级 like \'" & dr("层级") & "%\'")
    For Each cdr As DataRow In drs
        Filter &= " or 当前所在部门 = \'" & cdr("所属部门") & "\' And 是否可用 = 1"
    Next
   
Else If dr("职位") = "职员" Then
    Filter = " or 当前所在部门 = \'" & dr("所属部门") & "\'"
End If
msgbox(filter)
DataTables("溯源码").loadfilter = Filter
DataTables("溯源码").load

 


--  作者:weibu
--  发布时间:2018/8/7 13:32:00
--  
想问下,我这边想通过登陆者的身份去判断他后面进入系统所看到的数据权限,包含表的数据和统计表单的数据都是在相应权限内的。
是否只能在每个时间上都加上判断条件。有无其他一劳永逸的方法。加载数据的规则如上面您帮忙改正的代码

--  作者:有点甜
--  发布时间:2018/8/7 15:02:00
--  

你不是可以把filter保存下来?需要这个条件的时候,就引用变量。

 

vars("filter")=filter

 

 


--  作者:weibu
--  发布时间:2018/8/7 16:08:00
--  
在BeforeLoadOuterTable里面设置一次后,是否后面再进行查询、加载等数据时仅处理条件内数据?

您将的保存变量是在全局代码中定义吗?
有无介绍文档?
[此贴子已经被作者于2018/8/7 16:09:11编辑过]

--  作者:有点甜
--  发布时间:2018/8/7 17:06:00
--  
以下是引用weibu在2018/8/7 16:08:00的发言:
在BeforeLoadOuterTable里面设置一次后,是否后面再进行查询、加载等数据时仅处理条件内数据?

 
[此贴子已经被作者于2018/8/7 16:09:11编辑过]

 

不会。

 

直接写即可 vars("filter")=filter

 

http://www.foxtable.com/webhelp/scr/1450.htm