Foxtable(狐表)用户栏目专家坐堂 → 【菜单授权】获取用户自己定义的菜单名、分组名、按钮名后,设置了可见与可用之后,怎么更新菜单权限呢?


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

主题:【菜单授权】获取用户自己定义的菜单名、分组名、按钮名后,设置了可见与可用之后,怎么更新菜单权限呢?

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
【菜单授权】获取用户自己定义的菜单名、分组名、按钮名后,设置了可见与可用之后,怎么更新菜单权限呢?  发帖心情 Post By:2018/1/7 12:54:00 [显示全部帖子]

【菜单授权】获取用户自己定义的菜单名、分组名、按钮名后,设置了可见与可用之后,怎么更新菜单权限呢?
要求同步实现:
在设定之后 点应用  同步更新菜单权限显示
在用户登录之后  自动更新菜单权限
【注意】有自定义用户登录窗体,在用户自定义登录之后,希望能够匹配菜单权限表里面的设置来对应显示用户下的可见菜单项目。

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

已创建菜单权限表 ,格式如上图。

下列代码获取到菜单名 分组名  按钮名
For Each rt As RibbonMenu.Tab In RibbonTabs
    For Each rg As RibbonMenu.Group In rt.Groups
        For Each rb As Object In rg.Items
            Dim dr As DataRow = DataTables("菜单权限").AddNew()
            dr("菜单名") = rt.Name
            dr("分组名") =rg.Name
            dr("按钮名") =rb.Name
        Next
    Next
Next



有点蓝老师在论坛提供过如下代码  不知道怎么用  在命令窗口运行,直接是所有的菜单都看不见了

For i As Integer = 0 To ribbontabs.count - 1
    RibbonTabs(i).Visible = False
    For j As Integer = 0 To RibbonTabs(i).Groups .count - 1
        RibbonTabs(i).Groups (j).Visible = False
    Next
Next

For Each dr As DataRow In DataTables("菜单权限表").Select("用户名 = '" & user.name & "' and 菜单名 is not null" )
    If dr.IsNull("分组名") Then
        RibbonTabs(dr("菜单名")).Visible =  dr("可见")
        If dr("可见") = True Then
            For j As Integer = 0 To RibbonTabs(dr("菜单名")).Groups .count - 1
                RibbonTabs(dr("菜单名")).Groups (j).Visible = True
            Next
        End If
        RibbonTabs(dr("菜单名")).Enabled = dr("可用")
    ElseIf dr.IsNull("按钮名") Then
        RibbonTabs(dr("菜单名")).Visible = dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Visible =  dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Enabled =  dr("可用")
    Else
        RibbonTabs(dr("菜单名")).Visible = dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Visible = dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Items(dr("按钮名")).Visible =  dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Items(dr("按钮名")).Enabled =  dr("可用")
    End If
Next

[此贴子已经被作者于2018/1/7 16:20:17编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(李孝春)【菜单授权】获取用户自己定义的菜单...  发帖心情 Post By:2018/1/7 16:28:00 [显示全部帖子]

用户名 = '" & user.name
用户名 = '" & _user.name
是不是这两个的不同导致的呢?

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点甜)msgbox(user.name)msgbox(_UserNam...  发帖心情 Post By:2018/1/7 23:34:00 [显示全部帖子]

有点甜老师
换成了_nsername可以实现了根据不同用户实现权限菜单的显示


下面的代码放在自定义登录窗体中的  确定按钮事件代码或者项目启动后的事件代码都提示一样的错误

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

For i As Integer = 0 To ribbontabs.count - 1
    RibbonTabs(i).Visible = False
    For j As Integer = 0 To RibbonTabs(i).Groups .count - 1
        RibbonTabs(i).Groups (j).Visible = False
    Next
Next

For Each dr As DataRow In DataTables("菜单权限表").Select("用户名 = '" & _username & "' and 菜单名 is not null" )
    If dr.IsNull("分组名") Then
        RibbonTabs(dr("菜单名")).Visible =  dr("可见")
        If dr("可见") = True Then
            For j As Integer = 0 To RibbonTabs(dr("菜单名")).Groups .count - 1
                RibbonTabs(dr("菜单名")).Groups (j).Visible = True
            Next
        End If
        RibbonTabs(dr("菜单名")).Enabled = dr("可用")
    ElseIf dr.IsNull("按钮名") Then
        RibbonTabs(dr("菜单名")).Visible = dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Visible =  dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Enabled =  dr("可用")
    Else
        RibbonTabs(dr("菜单名")).Visible = dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Visible = dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Items(dr("按钮名")).Visible =  dr("可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Items(dr("按钮名")).Enabled =  dr("可用")
    End If
Next


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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(李孝春)回复:(有点甜)msgbox(user.name)m...  发帖心情 Post By:2018/1/8 [显示全部帖子]

我改成dr1就行了,谢谢啦!

 回到顶部