Foxtable(狐表)用户栏目专家坐堂 → 可视化授权的例子


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

主题:可视化授权的例子

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
可视化授权的例子  发帖心情 Post By:2009/6/8 17:42:00 [显示全部帖子]

可视化授权


Foxtable的权限管理非常完善,几乎可以控制每一个细节,大到一个表是否可见,小到一个单元格是否可编辑,都可以精确地控制。
但是很多易表用户,都留恋易表的可视化授权方式。
其实在FoxTable中,我们只需十几行的代码,就可以设计出一个可视化授权管理功能。

首先我们设计一个下图所示的表,名为授权表:



此主题相关图片如下:1048.gif
按此在新窗口浏览图片

 

如果不考虑中途切换用户,那么代码可以挪到项目事件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
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
 

如果不考虑中途切换用户,那么下面的这一段代码可以删除:


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



本节的内容只是提供了一个思路,其实授权是千变万化的,没有固定的模式,大家应该根据实际需要来确定自己的授权方式。

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:授权演示.table

[此贴子已经被作者于2009-6-9 8:29:15编辑过]

[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/8 17:44:00 [显示全部帖子]

呵呵,早知道你要做,我就不做了。

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/8 17:45:00 [显示全部帖子]

如果不考虑中途切换用户,下面的代码可以删除:

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

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/8 17:53:00 [显示全部帖子]

以下是引用yangming在2009-6-8 17:46:00的发言:

你几分钟,我可能要几天,还说不定要求救于你呢,呵呵


哈哈,哪有这么离谱啊。
图片点击可在新窗口打开查看


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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/9 8:33:00 [显示全部帖子]

以下是引用lihe60在2009-6-9 8:30:00的发言:
不过我的提议得到很多狐友的支持.


多看帮助,可以看出,这个例子并没有使用任何复杂的技术和代码。
有人说得对:foxtable是最容易的.net平台开发工具。
一些看似复杂的功能,在foxtable中,都能用简单的代码实现,关键是能够将帮助融会贯通,并能举一反三。
如果只是单单实现易表那种针对表的授权,不考虑切换用户,只需6到7行代码就行。

[此贴子已经被作者于2009-6-9 8:45:00编辑过]

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/11 16:40:00 [显示全部帖子]

以下是引用lihe60在2009-6-11 14:42:00的发言:
强烈建议狐狸爸爸回归设置,使用者直接选中复选框进行授权.我建议好多次,狐狸爸爸对这点好像不感冒,老是说用可视化图表就行.欢迎大家跟贴发表看法.


其实你得问题很好解决,你想一下,我可以在用户名输入*,表示所有用户,也就是针对所有用户隐藏,再加几行代码就行呢。


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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/11 17:10:00 [显示全部帖子]

以下是引用实话实说在2009-6-11 17:06:00的发言:

麻烦狐爸回应23楼


我搞错了,26楼的回复,其实就是针对你的。

图片点击可在新窗口打开查看

[此贴子已经被作者于2009-6-11 17:10:12编辑过]

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/12 8:31:00 [显示全部帖子]

有空再写一个。

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/14 9:07:00 [显示全部帖子]

呵呵,其实是完全一样的代码,为何就不肯自己尝试一下?
例如下面的例子,我用*号表示对所有用户有效,不管谁登陆,表D的第一列和第八列都会隐藏的:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2009-6-14 9:08:14编辑过]

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/6/14 10:39:00 [显示全部帖子]

以下是引用实话实说在2009-6-14 9:47:00的发言:

我的列隐藏是对所有用户,包括张三李四王五,他们可不会用*登陆


呵呵,我真的要批评你了,一不愿意动手写,写好了也不测试一下,就开始.....


 回到顶部
总数 11 1 2 下一页