以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于可视化授权的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=24918)

--  作者:ljz
--  发布时间: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
--  发布时间:2012/10/26 15:38:00
--  
代码的本意是限制权限,所以,角色越多,权利越小。楼主被标题误导了,名称应改为可视化限权可能更贴切。
--  作者:lin_hailun
--  发布时间:2012/10/26 15:52:00
--  
 嗯嗯,楼上正解。

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

--  作者:ljz
--  发布时间:2012/10/26 16:05:00
--  
以下是引用lin_hailun在2012-10-26 15:52:00的发言:
 嗯嗯,楼上正解。

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

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


--  作者:shenyl0211
--  发布时间: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
--  发布时间:2012/10/27 12:00:00
--  
 呵呵,看看这个项目,希望可以帮到你。

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