以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]菜单隐藏及是否可用  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=122133)

--  作者:湛江智
--  发布时间:2018/7/19 14:56:00
--  [求助]菜单隐藏及是否可用

LoadUserSetting

 

\'菜单权限表,下面代码,怎么修改实现对菜单及菜单按钮权限控制?求助


For Each rt As RibbonMenu.Tab In RibbonTabs
    rt.Visible = True
    rt.Enabled = True
    For Each rg As RibbonMenu.Group In rt.Groups
        rg.Visible = True
        rg.Enabled = True
        For Each itm As RibbonMenu.RibbonItem In rg.Items
            itm.Visible = True
            itm.Enabled = True
        Next
    Next
Next
For Each i As object In QAT.Items
    i.visible = True
    i.Enabled = True
Next 
For Each i As object In ConfigBar.Items
    i.visible = True
    i.Enabled = True
Next 


\'For Each dr As DataRow In DataTables("菜单权限表").Select("用户分组 = \'" & _UserGroup & "\' and 用户名 = \'" & _UserName & "\'")
For Each dr As DataRow In DataTables("菜单权限表").Select("用户名 = \'" & _UserName & "\'")
  If dr("菜单分区")= "功能区"  Then
      If dr.IsNull("分组名")  Then
        RibbonTabs(dr("菜单名")).Visible = Not dr("菜单不可见")
        RibbonTabs(dr("菜单名")).Enabled = Not dr("菜单不可用")   
      ElseIf dr.IsNull("按钮名")   Then
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Visible = Not dr("分组不可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Enabled = Not dr("分组不可用")
      Else
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Items(dr("按钮名")).Visible = Not dr("按钮不可见")
        RibbonTabs(dr("菜单名")).Groups(dr("分组名")).Items(dr("按钮名")).Enabled = Not dr("按钮不可用")   
      End If
    End If
Next


--  作者:湛江智
--  发布时间:2018/7/19 14:57:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:菜单权限.zip


图片点击可在新窗口打开查看此主题相关图片如下:对菜单及按钮 授权.png
图片点击可在新窗口打开查看
上面代码修改后,可能要加到  用户登录 窗口的确定按钮吧?
[此贴子已经被作者于2018/7/19 15:46:13编辑过]

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

代码我测试没问题。你遇到什么问题?

 

如果是自己做的用户管理,你要把代码写到登陆窗口的登陆按钮的click事件才对。


--  作者:湛江智
--  发布时间:2018/7/19 17:16:00
--  回复:(有点甜)代码我测试没问题。你遇到什么问题?...

上面代码代码写到登陆窗口的登陆按钮的click事件可以

但是在实际项目里,放在里面报错

 


图片点击可在新窗口打开查看此主题相关图片如下:小李 密码 f 登陆后窗口报错.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小李 密码 f 登陆后窗口报错.zip


--  作者:有点甜
--  发布时间:2018/7/19 17:31:00
--  

Dim UserName As String = e.Form.Controls("UserName").Value
Dim cmd As New SQLCommand
Dim dt As DataTable
Dim dr As DataRow
cmd.ConnectionName = "database"
If UserName = ""  Then
    Messagebox.show("请选择用户!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If
cmd.CommandText = "Select * From {Users} Where [Name] = \'" & UserName & "\'"
dt = cmd.ExecuteReader
If dt.DataRows.Count = 0 Then
    Messagebox.show("此用户不存在!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If
dr = dt.DataRows(0)
If MD5Encrypt(e.Form.Controls("PassWord").Value) = dr("Password") Then
    _UserName = UserName
    _UserGroup = dr("Group")
   
    \'② 记录最后一次成功登陆Name_确定_Click
    Dim yhm As WinForm.ComboBox = e.Form.Controls("UserName")
    Dim mm As WinForm.TextBox = e.Form.Controls("PassWord")
   
    SaveConfigValue("Name" & ComputerId,yhm.value)  \'② 记录最后一次成功登陆Name_确定_Click
    e.Form.Close
Else
    Messagebox.show("密码错误!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
End If

\'\'fxz 自定义用户与权限管理之一
\'If _UserGroup = "经理" Then
\'DataTables("工作日志").LoadFilter = ""
\'Else
\'DataTables("工作日志").LoadFilter = "创建者 = \'" & _UserName & "\'"
\'End If
\'DataTables("工作日志").Load()
\'
\'\'fxz 自定义用户与权限管理之一
\'If _UserGroup = "经理" Then
\'DataTables("室内设计项目").LoadFilter = ""
\'Else
\'DataTables("室内设计项目").LoadFilter = "项目参与人 like \'%" & _UserName & "%\'"
\'End If
\'DataTables("室内设计项目").Load()
\'
\'fxz 自定义用户与权限管理之一  培训管理窗口--这个窗口没有了,可删
\'If _UserGroup = "经理" Or _UserGroup = "文员" Or _UserGroup = "项目管理办公室" Then
\'DataTables("培训管理").LoadFilter = ""
\'Else
\'\'DataTables("培训管理").LoadFilter = "参与部门 = \'" & _UserGroup & "\' or 参与部门 like \'%," & _UserGroup & "\' or 参与部门 like \'" & _UserGroup & ",%\'"
\'DataTables("培训管理").LoadFilter = "参与部门 like \'%" & _UserGroup & "%\'"
\'End If
\'DataTables("培训管理").Load()
\'

If SystemMenu Then
    Syscmd.Project.OpenUserMenu()
End If
\'\'菜单权限表,只需下面2段代码
For Each rt As RibbonMenu.Tab In RibbonTabs
    rt.Visible = True
    rt.Enabled = True
    For Each rg As RibbonMenu.Group In rt.Groups
        rg.Visible = True
        rg.Enabled = True
        For Each itm As RibbonMenu.RibbonItem In rg.Items
            itm.Visible = True
            itm.Enabled = True
        Next
    Next
Next
For Each i As object In QAT.Items
    i.visible = True
    i.Enabled = True
Next
For Each i As object In ConfigBar.Items
    i.visible = True
    i.Enabled = True
Next


\'For Each dr1 As DataRow In DataTables("菜单权限表").Select("用户分组 = \'" & _UserGroup & "\' and 用户名 = \'" & _UserName & "\'")
For Each dr1 As DataRow In DataTables("菜单权限表").Select("用户名 = \'" & _UserName & "\'")
    If dr1("菜单分区")= "功能区"  Then
        If dr1.IsNull("分组名")  Then
            RibbonTabs(dr1("菜单名")).Visible = Not dr1("菜单不可见")
            RibbonTabs(dr1("菜单名")).Enabled = Not dr1("菜单不可用")
        ElseIf dr1.IsNull("按钮名")   Then
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Visible = Not dr1("分组不可见")
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Enabled = Not dr1("分组不可用")
        Else
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Items(dr1("按钮名")).Visible = Not dr1("按钮不可见")
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Items(dr1("按钮名")).Enabled = Not dr1("按钮不可用")
        End If
    End If
Next


--  作者:湛江智
--  发布时间:2018/7/19 18:10:00
--  回复:(有点甜)Dim UserName As String = e.Form.Co...

上面代码用在上面的项目中ok了,

但是在实际项目中,还出现下面报错如下图(Button6就是登陆窗口 确定按钮)

实际项目窗口设计按帮助文件:界面导航设计方案


图片点击可在新窗口打开查看此主题相关图片如下:还报错.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/7/19 18:19:18编辑过]

--  作者:有点甜
--  发布时间:2018/7/19 20:16:00
--  

1、这个代码你加上了没有?

 

If SystemMenu Then
    Syscmd.Project.OpenUserMenu()
End If

2、加入msgbox,定位一下出错的代码的位置

 

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

 


--  作者:湛江智
--  发布时间:2018/7/19 23:42:00
--  回复:(有点甜)1、这个代码你加上了没有??...
 For Each i As object In ConfigBar.Items
    i.visible = True
    i.Enabled = True
Next

MessageBox.Show(2)————只提示1次 2

\'For Each dr1 As DataRow In DataTables("菜单权限表").Select("用户分组 = \'" & _UserGroup & "\' and 用户名 = \'" & _UserName & "\'")
For Each dr1 As DataRow In DataTables("菜单权限表").Select("用户名 = \'" & _UserName & "\'")
MessageBox.Show(3)
    If dr1("菜单分区")= "功能区"  Then
        If dr1.IsNull("分组名")  Then
            RibbonTabs(dr1("菜单名")).Visible = Not dr1("菜单不可见")
            RibbonTabs(dr1("菜单名")).Enabled = Not dr1("菜单不可用")
        ElseIf dr1.IsNull("按钮名")   Then
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Visible = Not dr1("分组不可见")
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Enabled = Not dr1("分组不可用")
        Else
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Items(dr1("按钮名")).Visible = Not dr1("按钮不可见")
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Items(dr1("按钮名")).Enabled = Not dr1("按钮不可用")
        End If
    End If
Next
MessageBox.Show(3)————提示8次 3
实际项目窗口设计按帮助文件:界面导航设计方案,用了8个功能区菜单名
[此贴子已经被作者于2018/7/19 23:43:17编辑过]

--  作者:有点甜
--  发布时间:2018/7/20 0:05:00
--  

1、最后一个msgbox是否弹出?

 

2、如果弹出,说明不是这段代码的问题,这段代码看着也不会报错。


--  作者:湛江智
--  发布时间:2018/7/20 9:48:00
--  回复:(有点甜)1、最后一个msgbox是否弹出??...

For Each i As object In ConfigBar.Items
    i.visible = True
    i.Enabled = True
Next

\'For Each dr1 As DataRow In DataTables("菜单权限表").Select("用户分组 = \'" & _UserGroup & "\' and 用户名 = \'" & _UserName & "\'")
For Each dr1 As DataRow In DataTables("菜单权限表").Select("用户名 = \'" & _UserName & "\'")
MessageBox.Show(3)
    If dr1("菜单分区")= "功能区"  Then
        If dr1.IsNull("分组名")  Then
            RibbonTabs(dr1("菜单名")).Visible = Not dr1("菜单不可见")
            RibbonTabs(dr1("菜单名")).Enabled = Not dr1("菜单不可用")
        ElseIf dr1.IsNull("按钮名")   Then
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Visible = Not dr1("分组不可见")
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Enabled = Not dr1("分组不可用")
        Else
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Items(dr1("按钮名")).Visible = Not dr1("按钮不可见")
            RibbonTabs(dr1("菜单名")).Groups(dr1("分组名")).Items(dr1("按钮名")).Enabled = Not dr1("按钮不可用")
        End If
    End If
Next
MessageBox.Show(3)————提示1次下图这个窗口,点击确定按钮后才能登陆进去系统,怎么取消不显示下图的窗口呢?

实际项目窗口设计按帮助文件:界面导航设计方案


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

[此贴子已经被作者于2018/7/20 9:48:37编辑过]