Foxtable(狐表)用户栏目专家坐堂 → 求助:加载树权限问题


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

主题:求助:加载树权限问题

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
求助:加载树权限问题  发帖心情 Post By:2014/6/20 15:46:00 [显示全部帖子]

求教老师,我的加载树代码如下:
Dim Value()As String
Dim Filter As String
Value = e.Node.FullPath.Split("\")
Select Case e.Node.Level
    Case 0
       Filter ="HGB402 = '" & Value(0) & "'"
    Case 1
        Filter ="HGB402 = '" & Value(0) & "' And Year(GB311) = " & Value(1)
    Case 2
        Filter ="HGB402 = '" & Value(0) & "' And Year(GB311) = " & Value(1) & " And Month(GB311) = " & Value(2) 
    End Select
DataTables("CSsmdj").LoadFilter = Filter
DataTables("CSsmdj").Load()

另外在项目属性AfterOpenProject中写入:

If User.Name = "管理员" Then

    DataTables("CSsmdj").LoadFilter = ""

Else

    DataTables("CSsmdj").LoadFilter = "HGB402 = '" & User.Name & "'"

   End If

DataTables("CSsmdj").Load()



想法是普通用户只能加载自己的数据,不能加载查看别人的数据。

现在的问题是只以有开发者和管理员身份登录可以双击节点加载数据,普通用户双击不加载数据,求各位老师不吝赐教!


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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(Bin)If User.Type = UserTypeEnum...  发帖心情 Post By:2014/6/20 17:05:00 [显示全部帖子]

问题没有解决,将段代码写入 AfterOpenProject报错。

主要是加载树权限问题,即:开发者和管理员登陆可以加载所有用户的数据,其他用户只能加载自己的数据(即:"HGB402 = '" & User.Name & "'")。

我现在的问题是其他用户登陆双击加载树节点,没有实现加载数据自己数据!不知什么地方设置错误了?

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(Bin)是加到加载树代码里面去.  发帖心情 Post By:2014/6/20 17:10:00 [显示全部帖子]

写到加载树代码里面也没有实现想要的效果!

Dim Value()As String
Dim Filter As String
Value = e.Node.FullPath.Split("\")
Select Case e.Node.Level
    Case 0
       Filter ="HGB402 = '" & Value(0) & "'"
    Case 1
        Filter ="HGB402 = '" & Value(0) & "' And Year(GB311) = " & Value(1)
    Case 2
        Filter ="HGB402 = '" & Value(0) & "' And Year(GB311) = " & Value(1) & " And Month(GB311) = " & Value(2) 
    End Select
If User.Type = UserTypeEnum.Administrator OrElse User.Type = UserTypeEnum.Developer Then
DataTables("CSsmdj").LoadFilter = Filter
DataTables("CSsmdj").Load()
End If

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(Bin)If User.Type <> UserT...  发帖心情 Post By:2014/6/20 17:21:00 [显示全部帖子]

Dim Value()As String
Dim Filter As String
Value = e.Node.FullPath.Split("\")
Select Case e.Node.Level
    Case 0
        Filter ="HGB402 = '" & Value(0) & "'"
    Case 1
        Filter ="HGB402 = '" & Value(0) & "' And Year(GB311) = " & Value(1)
    Case 2
        Filter ="HGB402 = '" & Value(0) & "' And Year(GB311) = " & Value(1) & " And Month(GB311) = " & Value(2)
End Select
If User.Type <> UserTypeEnum.Administrator AndAlso User.Type <> UserTypeEnum.Developer Then
    Filter= "(" & Filter & ") and HGB402 = '" & User.Name & "'"
    DataTables("CSsmdj").LoadFilter = Filter
    DataTables("CSsmdj").Load()
End If

加载树代码改成上面的,开发者、管理员也不能加载数据了!

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点甜) 例子说话好吧?其它地方影响了...  发帖心情 Post By:2014/6/20 18:05:00 [显示全部帖子]

增加行:用户组为“医疗机构”
e.DataRow("HGB402") = User.Name

DataColchanged事件:用户组分别为“发证机关”和“公安机关”
If e.DataCol.Name = "BCNo" Then
    e.DataRow("签发机关") = User.Name
    e.DataRow("签发日期") = Date.Now
End If

If e.DataCol.Name = "GB307" Then
    e.DataRow("登记机关") = User.Name
    e.DataRow("登记日期") = Date.Now
End If

项目事件 LoadUserSetting 用户组为“医疗机构”

If User.Name = "管理员" Then

    DataTables("CSsmdj").LoadFilter = ""

Else

    DataTables("CSsmdj").LoadFilter = "HGB402 = '" & User.Name & "'"

   End If

DataTables("CSsmdj").Load()

 

 

If User.Name = "管理员" Then

    DataTables("单位").LoadFilter = ""

Else

    DataTables("单位").LoadFilter = "GS607 = '" & User.Name & "'"

End If

DataTables("单位").Load()



是否是上述代码有问题?


做例子有点麻烦,现在的项目表都是外部sql数据,内部表的原理是否相通?



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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点甜)?例子说话好吧?其它地方影响了...  发帖心情 Post By:2014/6/20 23:33:00 [显示全部帖子]

找到问题所在了。列名变更后没有修改BeforeLoad中的代码(GB402应改为HGB402),修改后的代码如下:


If User.Group = "医疗机构" '如果用户分组是医疗机构

    Dim fl As String = "[HGB402] = '" & User.Name & "'"

    If e.DataTable.LoadFilter = "" Then

        e.DataTable.LoadFilter = fl

    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then '如果没有包括医疗机构条件

        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl

    End If

End If


以上代码在切换为用户(如:第一人民医院),会将[HGB402]=“第一人民医院”的数据全部加载(上千条数据),影响速度。


如何修改加上只加载7天以内的数据(最近7天内的出生,列名是“GB311”)的条件?求老师赐教!


代码这样写可以不?

If User.Group = "医疗机构" '如果用户分组是医疗机构

    Dim fl As String = "[HGB402] = '" & User.Name & "'and [GB311]>= Date.Now.AddDays( -10) "

    If e.DataTable.LoadFilter = "" Then

        e.DataTable.LoadFilter = fl

    ElseIf e.DataTable.LoadFilter.IndexOf(fl) < 0 Then '如果没有包括医疗机构条件

        e.DataTable.LoadFilter = e.DataTable.Loadfilter & " And " & fl

    End If

End If

[此贴子已经被作者于2014-6-21 23:20:04编辑过]

 回到顶部