Foxtable(狐表)用户栏目专家坐堂 → [求助]


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

主题:[求助]

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


加好友 发短信
等级:童狐 帖子:266 积分:2150 威望:0 精华:0 注册:2012/3/28 16:49:00
[求助]  发帖心情 Post By:2017/11/14 13:55:00 [只看该作者]

老师你好!下面的代码是设置授权表,是根据用户名设置的,因为人数和表数较多,加一个人每次要增加很多行设置。现在我想有角色决定用户的表和列可见或不可见,这样我在平时工作中,只要设置人员的角色就可以了。因为角色与用户名、分组名的命令不同,请老师指教。谢谢!

项目事件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的第八列。


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


加好友 发短信
等级:童狐 帖子:266 积分:2150 威望:0 精华:0 注册:2012/3/28 16:49:00
  发帖心情 Post By:2017/11/14 13:59:00 [只看该作者]


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

我想把用户名改成角色?能一次性开发好。
[此贴子已经被作者于2017/11/14 14:01:06编辑过]

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


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

 

For Each dr As DataRow In DataTables("授权表").Select("角色 = '" & User.Roles & "'" )


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


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


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


加好友 发短信
等级:童狐 帖子:266 积分:2150 威望:0 精华:0 注册:2012/3/28 16:49:00
  发帖心情 Post By:2017/11/18 19:17:00 [只看该作者]

谢谢老师!
如果一个用户只有一个角色,能实现隐藏(不载入)表,只要用户有两上个或以上角色,就失效加载所有表。
请老师指教,有更好的办法吗?
再次感谢!

以下是我更改后的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.Roles & "'" )
        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

[此贴子已经被作者于2017/11/18 19:26:47编辑过]

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


加好友 发短信
等级:童狐 帖子:266 积分:2150 威望:0 精华:0 注册:2012/3/28 16:49:00
  发帖心情 Post By:2017/11/18 19:29:00 [只看该作者]

这是我的授权表

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

另外最好能设置代码使角色列能把系统所有角色自动载入可以选择,不用输入?
如果所有表名也能这样,更好了。
谢谢!
[此贴子已经被作者于2017/11/18 19:33:36编辑过]

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


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

1、

 

Dim filter As String = "1=2"
For Each s As String In user.Roles.split(",")
    filter &= " or 角色 = '" & s & "'"
Next
For Each dr As DataRow In DataTables("授权表").Select(filter)


 

2、AfterOpenProject事件

 

Dim ls As new List(Of String)
For Each u As UserInfo In users
    If u.Roles > "" Then
        For Each s As String In u.Roles.Split(",")
            If s > "" AndAlso ls.Contains(s) = False Then
                ls.Add(s)
            End If
        Next
    End If
Next
Tables("表A").cols("第一列").ComboList = String.Join("|", ls.ToArray)

 


 回到顶部