Foxtable(狐表)用户栏目专家坐堂 → [建议]恳请狐爸核实或解释table对datatable的继承性问题


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

主题:[建议]恳请狐爸核实或解释table对datatable的继承性问题

帅哥哟,离线,有人找我吗?
shenyl0211
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2012/10/31 0:03:00 [只看该作者]

程版主,下面是我优化过的权限控制代码,实际上可以放在其它的for each……next语句中,以减少循环。

您的代码不是来自您的程序,所以只有先设置列不可查阅不可编辑的代码,却没有设置列可查阅可编辑的代码。当然比我的简化多了。

 

 '初始化:所有的表都不可见,不可编辑,不可粘贴,相当于定义了所有的列都不可见,不可编辑

'表不可见肯定列不可见,列不可见肯定列无法编辑;表不能编辑肯定列也不能编辑
'故在<权限管理>表授权时,只需授权表可见和可编辑,即可恢复列可见和列可编辑,此时无需指明哪些列可见可编辑
'但对于不可见的少量列和不允许编辑的少量列须在权限表中一一列示
'所以,本段代码适合于列比较少的表,更适合于全表只有(不)可见和(不)可编辑的情况
For Each dt As DataTable In DataTables
    dt.AllowClipBoard=False '禁止复制粘贴
Next

For Each dt As Table In Tables
    dt.Visible = False
    dt.AllowEdit = False
Next
'对于列数很多(如100列)的<项目管理>表,不可见的列很少,可参照上述设置方法单独列示,
'但一一列示不允许编辑的列及其对应的角色就显得非常啰嗦,所以在此先设置都不可编辑,
'然后在授权表中先按权限设置表可见可编辑可复制粘贴,再设置不可见不可编辑的列,
'最后逐列设置都可见且都可编辑
For Each dc As Col In Tables("项目管理").Cols
    dc.AllowEdit = False
Next

'进行权限管理
Dim drs As List (of DataRow)
Dim roles(),role,values() As String
roles=_userroles.split(",")
For index As Integer = 0 To roles.length-1
    role="'*" & roles(index) & "*'"
    drs  = DataTables("权限管理").Select("角色名称 like " & role,"序号")
    For Each dr As DataRow In drs
        If dr.IsNull("列名")=True Then '程版主将true改成了false,根本没有考虑true是控制表的可查阅可编辑可粘贴,而false(即后续的else)是控制列的。
且没有下段else,是不合适的。
            Tables(dr("表名")).Visible =dr("可查阅")
            Tables(dr("表名")).AllowEdit =dr("可编辑")
            If dr("表名").Contains(".") Then '说明是关联表,是table,不是datatable,没有AllowClipBoard属性
                Continue For 

            Else
                DataTables(dr("表名")).AllowClipBoard =dr("可粘贴")
            End If
        Else '以下是被程版主省略但实际上是不能省略的代码
            Values = dr("列名").split(",")
            For I1 As Integer = 0 To Values.Length - 1
                Tables(dr("表名")).cols(Values(I1)).Visible = dr("可查阅")
                Tables(dr("表名")).cols(Values(I1)).AllowEdit = dr("可编辑")
            Next
        End If
    Next
Next

 

可见,先设置不可见不可编辑对于列数较少的表是有利的,也是容易理解的,但一旦出现列数较多、角色较多的表就有问题了,

虽然编程容易,编程者也清楚授权过程,但对实际的授权者来说不是那么容易理解的。

如果先设置可见可编辑,那么,不管列数多少角色多少,只要让授权者明了应该设置哪些角色不能查阅、不能编辑哪些表和列就简单多了。

[此贴子已经被作者于2012-10-31 0:07:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40574 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/10/31 1:35:00 [只看该作者]

您的权限表的结构都有问题,否则,不会这么麻烦的,我的授权表对权限的管理涉及到每一个表的每一条记录的每一个字段,相当于每个单元格授权了,也没有您说得这么麻烦,罗唆了一大堆,可见您还没有掌握要领,继续加油研究吧!

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2012/10/31 12:33:00 [只看该作者]

程版主,我的表结构是序号、角色名称(多值)、表名(单值)、列名(多值)、可查阅、可编辑、可粘贴。您的表结构和代码可否分享一下?

 


 回到顶部
总数 13 上一页 1 2