-- 作者:smardisk
-- 发布时间:2018/9/23 16:18:00
--
可视化授权的实现 本节的内容,可以参考CaseStudy目录下的文件:可视化授权.Table Foxtable的权限管理非常完善,几乎可以控制每一个细节,大到一个表是否可见,小到一个单元格是否可编辑,都可以精确地控制。 但是很多易表用户,都留恋易表的可视化授权方式。 其实在Foxtable中,我们只需十几行的代码,就可以设计出一个可视化授权管理功能。 首先我们设计一个下图所示的表,名为授权表: 然后项目事件LoadUserSetting中,加入如下代码: For
Each t As
Table
In
Tables t.Visible =
True t.AllowEdit
= true For
Each c As Col In t.Cols c.Visible = True c.AllowEdit =
True Next Next Tables("授权表").Visible = (User.Type
<> UserTypeEnum.User ) If User.Type =
UserTypeEnum.User Then For
Each dr
As
DataRow
In
DataTables("授权表").Select("用户名 = \'" & User.Name & "\'" ) If
dr.IsNull("列名") Then
Tables(dr("表名")).Visible = Not dr("不可见")
Tables(dr("表名")).AllowEdit = Not dr("不可编辑")
Else Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑") End
If Next End
If 上面的代码,条理清晰,原理简单,相信不用我解释,大家也能看明白。 代码是通用的,如果你需要禁止某用户编辑某个表或列,或者禁止某用户查看某个表或列,只需在授权表中加入相应的设置即可。 也就说是,需要禁止某个权限的时候,才需要在授权表加入相应的条目。 例如按照上图的设置,张三看不到表A,不能编辑表B,李四则看不到表B,不能编辑表C,至于王五,比较特殊,他看不到表A的第三列,不能编辑表A的第八列。 实际应用的时候,我们更多的是根据用户分组进行授权,此时只需将授权表的用户名改为分组名,同时将代码改为: For
Each t As
Table
In
Tables t.Visible =
True t.AllowEdit
= true For
Each c As Col In t.Cols c.Visible = True c.AllowEdit =
True Next Next Tables("授权表").Visible = (User.Type
<> UserTypeEnum.User ) If User.Type =
UserTypeEnum.User Then For
Each dr As
DataRow
In
DataTables("授权表").Select("分组名 = \'" & User.Group & "\'" ) If
dr.IsNull("列名") Then Tables(dr("表名")).Visible = Not
dr("不可见")
Tables(dr("表名")).AllowEdit = Not dr("不可编辑")
Else Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑") End
If Next End
If 如果不考虑中途切换用户,那么代码可以挪到项目事件AfterOpenProject中,下面的这一段代码可以删除: For
Each t As
Table
In
Tables t.Visible =
True t.AllowEdit
= true For
Each c As Col In t.Cols c.Visible = True c.AllowEdit =
True Next Next
本节的内容只是提供了一个思路,其实授权是千变万化的,没有固定的模式,大家应该根据实际需要来确定自己的授权方式。
|