Foxtable(狐表)用户栏目专家坐堂 → [求助]结合帮助里的 多层复杂授权求助【老大帮忙看下 最后的代码有问题嘛?】~~~~~~~~~~~~~


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

主题:[求助]结合帮助里的 多层复杂授权求助【老大帮忙看下 最后的代码有问题嘛?】~~~~~~~~~~~~~

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
[求助]结合帮助里的 多层复杂授权求助【老大帮忙看下 最后的代码有问题嘛?】~~~~~~~~~~~~~  发帖心情 Post By:2012/2/24 22:36:00 [只看该作者]

之前  老大帮助我解决了 帮助中的目录树授权

 

http://www.datasoft.com.cn/dispbbs.asp?BoardID=2&ID=15526&skin=0

 

目前由于我设计的是ERP系统   界面已基本定型 如图

 


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

 

我是采用的分级授权的方式,左边的导航栏各按钮(例如图中的【销售管理】)是第一层;

 

各按钮里的功能模块(如图中显示的【A卡管理】和【车辆出入库】)是第二层,

 

右边的模块流程图里的图标 是第三层 

 

第四层就是流程图功能进去后的各项细分小功能 比如快捷菜单里的更改销售顾问,如下图

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

 

 

很显然之前的授权模式已经不适合现在的分层授权方式,之前的如图


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

 

 

 

现在的


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

 

 


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

 

 

我权限是采用 内部函数  代码中利用 Functions.Execute("shouquan","绩效考核","绩效录入") 等等来判断的

 

 

请问我这种想法是否可行,或者有必要??

[此贴子已经被作者于2012-2-27 9:53:07编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/25 13:14:00 [只看该作者]

顶下~~~~~~~


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/25 17:34:00 [只看该作者]

自己看了下代码 感觉好复杂 


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/26 9:38:00 [只看该作者]

顶起~


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/2/26 10:03:00 [只看该作者]

道理都是一样的,关键是要理解帮助的示例,才能灵活变通。


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/26 10:58:00 [只看该作者]

那就按这个来吧

 

老大 您之前帮我写的这段代码 有几处我不太明白  请教下~~

Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim tr2 As WinForm.TreeView = e.Form.Controls("TreeView2")
If tr2.Focused AndAlso e.node.Level = tr2.SelectedNode.Level Then

触发事件的节点层级=选择的节点层级 (肯定相等的啊,为什么还要有个=比较)


    Dim dr As DataRow
    Dim nds1 As New List(of winform.treenode)
    If tr1.SelectedNode.Nodes.count = 0 Then

目录树1的节点为0时,增加目录树1选择的节点到nds1里,矛盾嘛不是。。。
        nds1.add(tr1.SelectedNode)
    Else
        nds1.addrange(tr1.SelectedNode.nodes)
    End If

    Dim nds2 As New List(of winform.treenode)
    If tr2.SelectedNode.Nodes.count = 0 Then
        nds2.add(tr2.SelectedNode)
    Else
        nds2.addrange(tr2.SelectedNode.nodes)
    End If
    For Each nd1 As WinForm.TreeNode In nds1
        For Each nd2 As winform.treenode In nds2
            dr = DataTables("授权").Find("权限 = '" & nd2.Text & "'")
            Dim nms As New List(of String)
            nms.Addrange(dr("用户").trim(",").split(","))
            Dim nm As String  = nd1.Text.trim("←")
            If tr2.SelectedNode.Checked = True Then
                If nms.Contains(nm) = False Then
                    nms.add(nm)
                End If
            Else
                If nms.Contains(nm) Then
                    nms.Remove(nm)
                End If
            End If
            If nd2.Checked <> tr2.SelectedNode.Checked Then
                nd2.Checked = tr2.SelectedNode.Checked
            End If
            dr("用户") = (String.Join(",",nms.ToArray)).trim(",")
        Next
    Next
End If

[此贴子已经被作者于2012-2-26 10:58:16编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/2/26 11:10:00 [只看该作者]

当时看不懂,当时就应该问,现在这么久了,突然贴出一段代码,我哪里还记得是什么意思啊?

1、触发事件的节点和选择的节点是两回事,就像触发事件的行和选择的行,是两回事一样。

2、下面的代码不矛盾,意思是选定节点没有子节点的话,将选定节点本身加入到集合,如果他有子节点的话,将他的所有子节点加入集合。

 

If tr1.SelectedNode.Nodes.count = 0 Then
       nds1.add(tr1.SelectedNode)
Else
        nds1.addrange(tr1.SelectedNode.nodes)
End If


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/26 11:30:00 [只看该作者]

当时感觉太复杂了  没想劳烦您啊

If tr2.SelectedNode.Nodes.count = 0 Then
       nds1.add(tr2.SelectedNode)
Else
        nds1.addrange(tr2.SelectedNode.nodes)
End If

这段代码 红色部分 我改成了  allnodes  

貌似没用啊  还是出错 

 

但是点击第二层,例如:A卡管理  子节点会全部选择 相应表里 也会更新

 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2012-2-26 13:03:48编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/26 13:47:00 [只看该作者]

Dim tr1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim tr2 As WinForm.TreeView = e.Form.Controls("TreeView2")
If tr2.Focused AndAlso e.node.Level = tr2.SelectedNode.Level Then
    Dim drs As List(of DataRow)
    Dim nds1 As New List(of winform.treenode)
    If tr1.SelectedNode.Nodes.count = 0 Then
        nds1.add(tr1.SelectedNode)
    Else
        nds1.addrange(tr1.SelectedNode.allnodes)
    End If
    Dim nds2 As New List(of winform.treenode)
    If tr2.SelectedNode.Nodes.count = 0 Then
        nds2.add(tr2.SelectedNode)
    Else
        nds2.addrange(tr2.SelectedNode.allnodes)
    End If
    For Each nd1 As WinForm.TreeNode In nds1
        For Each nd2 As winform.treenode In nds2
            drs = DataTables("授权").Select("[流程] = '" & nd2.Text & "' Or [功能模块] = '" & nd2.Text & "' Or [导航分组] = '" & nd2.Text & "'")  
            For Each dr As DataRow In drs
                Dim nms As New List(of String)
                nms.Addrange(dr("用户").trim(",").split(","))
                Dim nm As String  = nd1.Text.trim("←")
                If tr2.SelectedNode.Checked = True Then
                    If nms.Contains(nm) = False Then
                        nms.add(nm)
                    End If
                Else
                    If nms.Contains(nm) Then
                        nms.Remove(nm)
                    End If
                End If
                If nd2.Checked <> tr2.SelectedNode.Checked Then
                    nd2.Checked = tr2.SelectedNode.Checked
                End If
                dr("用户") = (String.Join(",",nms.ToArray)).trim(",")
            Next
        Next
    Next
End If

 

最终代码 老大帮忙看下 是否有问题~~

[此贴子已经被作者于2012-2-26 15:20:42编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2012/2/27 9:53:00 [只看该作者]

最终代码 老大帮忙看下 是否有问题~~


 回到顶部
总数 11 1 2 下一页