Foxtable(狐表)用户栏目专家坐堂 → 关于可视化授权的问题


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

主题:关于可视化授权的问题

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


加好友 发短信
等级:童狐 帖子:273 积分:3406 威望:0 精华:0 注册:2012/4/20 16:43:00
关于可视化授权的问题  发帖心情 Post By:2012/10/26 15:28: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

If User.Group <> "厂办" Then

    Tables("表权限").Visible = False

Else

    Tables("表权限").Visible = True

End If

quanx = "'" & quanx.Replace(",", "','") & "'"

For Each dr As DataRow In DataTables("表权限").Select("权限 in (" & quanx & ")" )

    If dr.IsNull("列名") Then

        Tables(dr("表名")).Visible = Not dr("不可见")

        Tables(dr("表名")).AllowEdit = Not dr("不可编辑")

    Else

        Dim nms() As String = dr("列名").Split(",")

        For Each nm As String In nms

            Tables(dr("表名")).Cols(nm).Visible = Not dr("不可见")

            Tables(dr("表名")).Cols(nm).AllowEdit = Not dr("不可编辑")

        Next

    End If

Next

 

如果是一个用户(如张2)有多个角色那么以上涂色的代码得到的“限制权限”的并集,即用户的权限小了。了,如何得到的是“限制权限”的交集,使用户的权限范围应该是变大。请教高手如何实现。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:目录树与可视授权.table


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2012/10/26 15:38:00 [只看该作者]

代码的本意是限制权限,所以,角色越多,权利越小。楼主被标题误导了,名称应改为可视化限权可能更贴切。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/10/26 15:52:00 [只看该作者]

 嗯嗯,楼上正解。

 如果是设置权限的话,应该是全部不可见不可编辑,然后逐步扩展权限。

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


加好友 发短信
等级:童狐 帖子:273 积分:3406 威望:0 精华:0 注册:2012/4/20 16:43:00
  发帖心情 Post By:2012/10/26 16:05:00 [只看该作者]

以下是引用lin_hailun在2012-10-26 15:52:00的发言:
 嗯嗯,楼上正解。

 如果是设置权限的话,应该是全部不可见不可编辑,然后逐步扩展权限。

我也想过,但不会写代码。建议狐爸弄一个逐步扩展权限的例子,并把《目录树形式的授权》改为《目录树形式的限权》


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


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

权限和限权是一回事,只是被动式和主动式。是扩大还是缩小,要看具体的情况。以下是我权限缩小的完整代码,希望对你有帮助:

 

AfterOpenProject事件中:

Forms("用户登录").Open()
If _UserName = "" Or _userroles="" Or _usergroup="" Then
Syscmd.Project.Exit()
Return
End If

'初始化:所有的表和列都可见和可编辑,可粘贴
For Each dt As DataTable In DataTables
dt.AllowEdit = True
dt.AllowClipBoard=True
Next
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
'进行权限管理
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
Tables(dr("表名")).Visible =dr("可查阅")
DataTables(dr("表名")).AllowEdit =dr("可编辑")
Tables(dr("表名")).AllowEdit =dr("可编辑") ’必须加这句,否则失效
DataTables(dr("表名")).AllowClipBoard =dr("可粘贴")
Else
Values = dr("列名").split(",")
For I1 As Integer = 0 To Values.Length - 1
Tables(dr("表名")).cols(Values(I1)).Visible = dr("可查阅")
DataTables(dr("表名")).datacols(Values(I1)).AllowEdit = dr("可编辑")
Tables(dr("表名")).cols(Values(I1)).AllowEdit = dr("可编辑") ’必须加这句,否则失效
Next
End If
Next
Next


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/10/27 12:00:00 [只看该作者]

 呵呵,看看这个项目,希望可以帮到你。

 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=5&ID=23959
[此贴子已经被作者于2012-10-27 12:00:00编辑过]

 回到顶部