菜单与权限管理

菜单的功能区、功能组以及所有的菜单组件,都有Visible和Enabled属性,这样我们可以根据登录用户的不同,隐藏和禁用某些菜单项目,实现菜单的授权。

示例一

我们增加一个用户“录入员”,如果该用户登录,隐藏“数据表”和“管理项目”两个功能区,并禁用杂项功能区的“执行SQL”和 “命令窗口”两个按钮。

第一步当然是增加一个名为“录入员”的用户,然后在菜单系统事件LoadUserSetting加入如下代码:

If User.Name = "录入员" Then
    RibbonTabs(
"Table").Visible = False
    RibbonTabs(
"Project").Visible = False
    RibbonTabs(
"Other").Groups("Execute").Items("SQLExecute").Enabled = False
    RibbonTabs(
"Other").Groups("Execute").Items("Command").Enabled = False
Else

    RibbonTabs(
"Table").Visible = True
    RibbonTabs(
"Project").Visible = True
    RibbonTabs(
"Other").Groups("Execute").Items("SQLExecute").Enabled = True
    RibbonTabs(
"Other").Groups("Execute").Items("Command").Enabled = True
End
If

设计完成后,请切换到录入员用户,看看是否已经实现设计要求。

示例二

在默认情况下,锁定某个表,将不能修改此表的数据,也不能增加或删除行,但是可以增加、删除、更改列;也就是说,锁定表只是保护数据,却不保护结构。

如果希望表被锁定的情况下,能同时禁止修改数据和结构,可以在系统事件CurrentTableChanged中设置代码:

If CurrentTable.AllowEdit Then
    RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled = True
   
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled = True
   
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled = True
   
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled =
True

Else

    RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled = False
   
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled = False
   
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled = False
   
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled =
False

End
If

原理很简单,在选择不同的表之后,根据当前表(CurrentTable)的AllowEdit属性,来禁止或启用与修改表结构相关的菜单按钮。

上面的代码也可以简化为:

RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled = CurrentTable.AllowEdit
RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled = CurrentTable.AllowEdit
RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled = CurrentTable.AllowEdit
RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled = CurrentTable.AllowEdit

示例三

举一反三,同样我们可以在MainTableChanged或CurrentTableChanged事件中设置代码,使得选择某些表后,自动禁用指定的菜单命令,而选择另一些表后,则自动启用指定的菜单命令。

例如我们在MainTableChanged设置如下的代码:

Select Case MainTable.name
    Case
"
A","C"
        RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled = True
        RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled = True
        RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled = True
        RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled = True
    Case
"
B"
        RibbonTabs("Table").Groups("Column").Items("InsertColumn").Enabled = False
        RibbonTabs("Table").Groups("Column").Items("AddColumn").Enabled = False
        RibbonTabs("Table").Groups("Column").Items("ModiColumn").Enabled = False
        RibbonTabs("Table").Groups("Column").Items("DeleteColumn").Enabled =
False

End
Select

这样我们选择表A或者表C的时候,可以通过菜单命令修改其表结构,而选择表B的时候,将无法通过菜单命令修改其结构,因为相关菜单命令已经禁用。


本页地址:http://www.foxtable.com/webhelp/topics/2438.htm