Foxtable(狐表)用户栏目专家坐堂 → 关于权限设计的问题


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

主题:关于权限设计的问题

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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
关于权限设计的问题  发帖心情 Post By:2018/9/18 15:25:00 [只看该作者]

我有2个表,其中成绩表需要分配权限,按照任课表中的设置。
要求:语文老师1001登陆后只能看到1班和2班的语文成绩,语文成绩列可以编辑修改,其他的行和列隐藏。
其他班级类似,请教专家这个怎么设计编程?

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/9/18 15:30:09编辑过]

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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
  发帖心情 Post By:2018/9/18 15:47:00 [只看该作者]

是不是可以这样理解:让特定的用户编辑特定的行和特定的列,其他的行和列没有任何权限并隐藏,这个怎么搞?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 16:11:00 [只看该作者]

参考代码

 

Dim name As String = "1001"
Dim bjs As String = DataTables("任课").GetComboListString("班级", "语文='" & name & "'")
DataTables("成绩总表").LoadFilter = "班级 in ('" & bjs.replace("|", "','") & "')"
DataTables("成绩总表").Load


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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
  发帖心情 Post By:2018/9/18 16:36:00 [只看该作者]

给版主点赞

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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
  发帖心情 Post By:2018/9/18 16:51:00 [只看该作者]

我放在项目属性加载项里面好像没有效果啊

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 18:41:00 [只看该作者]

以下是引用chongziwang在2018/9/18 16:51:00的发言:
我放在项目属性加载项里面好像没有效果啊

 

写到afterOpenProject事件或者loadUserSetting事件。


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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
  发帖心情 Post By:2018/9/18 22:04:00 [只看该作者]

我再试一下

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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
  发帖心情 Post By:2018/9/23 15:58:00 [只看该作者]

按照版主的方法,行显示已经成功,列还没有限制住,其他的列还是显示出来的,再次请教版主,谢谢

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


加好友 发短信
等级:婴狐 帖子:46 积分:369 威望:0 精华:0 注册:2018/9/10 9:18:00
  发帖心情 Post By: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

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


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


加好友 发短信
等级:幼狐 帖子:174 积分:3262 威望:0 精华:0 注册:2018/3/5 14:39:00
  发帖心情 Post By:2018/9/23 16:31:00 [只看该作者]

我是想实现通过任课表的字段值自动判断,显示相应的行和列,其他的隐藏不可编辑,如果做成授权表会很长,勾选的时候容易出错

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