以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]结合帮助里的 多层复杂授权求助【老大帮忙看下 最后的代码有问题嘛?】~~~~~~~~~~~~~  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=16834)

--  作者:gaoyong30000
--  发布时间: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
--  发布时间:2012/2/25 13:14:00
--  

顶下~~~~~~~


--  作者:gaoyong30000
--  发布时间:2012/2/25 17:34:00
--  

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


--  作者:gaoyong30000
--  发布时间:2012/2/26 9:38:00
--  

顶起~


--  作者:狐狸爸爸
--  发布时间:2012/2/26 10:03:00
--  

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


--  作者:gaoyong30000
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间: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
--  发布时间: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
--  发布时间: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
--  发布时间:2012/2/27 9:53:00
--  

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