事件与权限管理

权限管理会有专门的一章介绍,这里先简单介绍一下。

为便于权限管理,我们强列建议你为每一个用户指定一个分组,这样我们在编码进行权限管理的时候,就可以针对同一组的用户进行编码,而不用针对每一个用户进行编码。

权限管理有两种方式:

方式一

打开系统或者切换用户之后,都会触发LoadUserSetting事件,我们可以在这里设置代码,根据登录用户的分组进行权限设置。

示例

例如只有经理级别的用户,才能编辑表A,可以在LoadUserSetting事件中加入下面的代码:

If User.Group = "经理" Then
    DataTables
("表A").AllowEdit = True
Else
    DataTables
("表A").AllowEdit = False
End
If

如果你要求订单表的折扣列只能经理编辑,可以在LoadUserSetting事件中加入下面的代码:

If User.Group = "经理" Then
    DataTables
("订单").DataCols("折扣").AllowEdit = True
Else
    DataTables
("订单").DataCols("折扣").AllowEdit  = False
End
If

方式二

在Foxtable中进行任何一项数据管理操作,例如增加行、删除行、锁定行、编辑数据等等,都会触发事件; 通过在事件中编码,可以进行和登录用户相关的条件判断,符合条件则允许操作,不符合条件则禁止操作。 这样我们可以进行更复杂的权限管理。

示例

例如公司规定,对于已经结帐的行,只有“经理”级别的用户才能删除,你可以在BeforeDeleteDataRow设置如下代码: 

'如果当前用户不是经理级别,而且即将被删除的行已经结帐,那么取消删除。
If
User.Group <> "经理" And e.DataRow("结帐") = True Then
    MessageBox.Show(
"对于已经结帐的行,只有经理才能删除!", "提示")
    e.Cancel =
True
End
If

如果在该表的PrepareEdit事件中加入代码:

If e.Row("已结帐") = True AndAlso User.Group <> "经理" Then
    e.Cancel = True
End
If

那么就只有经理级别的用户才能编辑已经结帐的行。

如果要求只有经理才能修改折扣列的内容,可以在PrepareEdit事件中加入代码:

If e.Col.Name = "折扣" AndAlso User.Group <> "经理" Then
    e.Cancel = True
End
If


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