以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多个功能区不同功能组的权限代码要怎么控制  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=94663)

--  作者:k931931
--  发布时间:2016/12/29 9:47:00
--  多个功能区不同功能组的权限代码要怎么控制

图片点击可在新窗口打开查看此主题相关图片如下:目录授权.jpg
图片点击可在新窗口打开查看
大神们,帮助提供了一个功能区的访问代码,如果有两个功能区或者多个功能这个代码要怎么改变呢


If Functions.Execute("ShouQuan","订单管理","批准订单") Then
   
\'用于批准订单的代码
End If

再例如判断用户是否具备生产管理分组的全部权限:

If Functions.Execute("ShouQuan","生产管理","") Then
    \'代码

End If


--  作者:有点色
--  发布时间:2016/12/29 9:50:00
--  
 没理解你的问题,请举例说明什么意思。
--  作者:k931931
--  发布时间:2016/12/29 10:52:00
--  

如图所示,工作菜单2,
图片点击可在新窗口打开查看此主题相关图片如下:1-2.jpg
图片点击可在新窗口打开查看
怎么样去设置?

代码如下:
If Functions.Execute("ShouQuan","业务管理","采购订单") Then
    Forms("采购订单").open()
End If

--  作者:有点色
--  发布时间:2016/12/29 10:58:00
--  

改一下自定义函数的代码

 

If User.Type <> UserTypeEnum.User Then \' 如果是开发者或者管理员
    Return True \'则具备所有权限
End If
Dim dt As DataTable = DataTables("授权")
Dim dr As DataRow
If Args(1) = "" Then
    \'首先判断分组的授权用户是否包括此用户或此用户所属的分组
    dr = dt.Find("分组 = \'" & args(0) & "\' And 权限 Is Null" )
    If dr Is Nothing Then
        MessageBox.show("不存在名为""" & args(0) & "分组!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Return False
    End If
    If dr.IsNull("用户") = False Then
        Dim nms() As String = dr("用户").Split(",")
        For Each nm As String In nms
            If nm = User.Group OrElse nm = User.Name Then \'如果授权用户包括登录用户所属的分组或其用户名
                Return True \'返回True
            End If
        Next
    End If
    Return False
End If
\'然后判断权限的授权用户是否包括此用户或此用户所属的分组

dr = dt.Find("分组 = \'" & args(0) & "\' And 权限 = \'" & args(1) & "\'")
If dr Is Nothing Then
    MessageBox.show("不存在名为""" & args(1) & "权限!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return False
End If
If dr.IsNull("用户") = False Then
    Dim nms() As String = dr("用户").Split(",")
    For Each nm As String In nms
        If nm = User.Group OrElse nm = User.Name Then \'如果授权用户包括登录用户所属的分组或其用户名
            Return True \'返回True
        End If
    Next
End If
Return False


--  作者:k931931
--  发布时间:2016/12/29 12:54:00
--  
程序没有报错,但是代码没有运行成功,请看附件(附件一直无法上传)
[此贴子已经被作者于2016/12/29 12:55:40编辑过]

--  作者:有点色
--  发布时间:2016/12/29 13:03:00
--  

你要用对应的用户登录进去,才能测试的。

 

你弹出一下msgbox(user.name)看一下,是不是对应的用户。


--  作者:k931931
--  发布时间:2016/12/29 13:30:00
--  

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

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

图片点击可在新窗口打开查看此主题相关图片如下:21.jpg
图片点击可在新窗口打开查看
奇怪了,我明明用自己定义的账号登录,怎么进入系统就变成了系统菜单下的账号呢,不解
有办法按照自己定义的账号登录吗?
[此贴子已经被作者于2016/12/29 14:30:58编辑过]

--  作者:有点色
--  发布时间:2016/12/29 14:38:00
--  

改一下

 

If User.Type <> UserTypeEnum.User Then \' 如果是开发者或者管理员
    Return True \'则具备所有权限
End If
Dim dt As DataTable = DataTables("授权")
Dim dr As DataRow
If Args(1) = "" Then
    \'首先判断分组的授权用户是否包括此用户或此用户所属的分组
    dr = dt.Find("分组 = \'" & args(0) & "\' And 权限 Is Null" )
    If dr Is Nothing Then
        MessageBox.show("不存在名为""" & args(0) & "分组!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Return False
    End If
    If dr.IsNull("用户") = False Then
        Dim nms() As String = dr("用户").Split(",")
        For Each nm As String In nms
            If nm = _UserGroup OrElse nm = _username Then \'如果授权用户包括登录用户所属的分组或其用户名
                Return True \'返回True
            End If
        Next
    End If
    Return False
End If
\'然后判断权限的授权用户是否包括此用户或此用户所属的分组

dr = dt.Find("分组 = \'" & args(0) & "\' And 权限 = \'" & args(1) & "\'")
If dr Is Nothing Then
    MessageBox.show("不存在名为""" & args(1) & "权限!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return False
End If
If dr.IsNull("用户") = False Then
    Dim nms() As String = dr("用户").Split(",")
    For Each nm As String In nms
        If nm = _UserGroup OrElse nm = _username Then \'如果授权用户包括登录用户所属的分组或其用户名
            Return True \'返回True
        End If
    Next
End If
Return False


--  作者:k931931
--  发布时间:2016/12/29 15:04:00
--  
非常感谢,现在测试,已经OK了
--  作者:15177757041
--  发布时间:2017/8/30 20:08:00
--  
我也是想问同样的问题