以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于权限控制代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=187134)

--  作者:jhxb8821
--  发布时间:2023/6/25 15:46: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

    Return

End If

For Each dr As DataRow In DataTables("授权表").Select("姓名 = \'" & _UserName & "\'" )

\'\'For Each dr As DataRow In DataTables("授权表").Select("用户名 = \'" & User.Name & "\'" )

    If dr.IsNull("列名") Then

        For Each t As Table In Tables

            If t.DataTable.Name = dr("表名") Then

                t.Visible = Not dr("不可见")

                t.AllowEdit = Not dr("不可编辑")

            End If

        Next

    Else

        For Each t As Table In Tables

            If t.DataTable.Name = dr("表名") Then

                For Each c As Col In t.Cols

                    If c.Name = dr("列名") Then

                        c.Visible = Not dr("不可见")

                        c.AllowEdit = Not dr("不可编辑")

                    End If

                Next

            End If

        Next

    End If

Next



--  作者:有点蓝
--  发布时间:2023/6/25 15:52:00
--  
如果使用的是自定义用户管理,不需要把代码放到LoadUserSetting,放到登录窗口的确定按钮中
--  作者:jhxb8821
--  发布时间:2023/6/25 16:11:00
--  代码
这样写还是不行?
Dim bm As WinForm.ComboBox = e.Form.Controls("部门")
Dim zh As WinForm.TextBox = e.Form.Controls("账号")
Dim mm As WinForm.TextBox = e.Form.Controls("密码")
Dim xm As WinForm.ComboBox = e.Form.Controls("姓名")
If bm.Value ="" Then
    MessageBox.Show ("请选择部门!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
End If
If xm.Value ="" Then
    MessageBox.Show ("请选择姓名!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
End If
If zh.Value ="" Then
    MessageBox.Show ("请输入账号!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
End If
If mm.value = "" Then
    MessageBox.Show ("密码不能为空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
End If

\'判断部门账号是否一致
Dim dr As DataRow = DataTables("用户管理").Find("账号 = \'" & zh.text & "\'")
\'\'Dim dr As DataRow = DataTables("用户管理").Find("账号 = \'" & zh.text & "\' and 部门=\'" & bm.text & "\' and 姓名=\'" & xm.text & "\'")
If dr Is Nothing Then
    MessageBox.Show ("账号不存在,请确认账号是否注册!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
End If

If  bm.value= dr("部门") And xm.value= dr("姓名") And zh.value= dr("账号") Then
    If  mm.value= dr("密码") Then
        If dr("用户状态") = "停用" Then  \'如果前面部门或姓名只加载了启用状态的,此处不用判断
            MessageBox.Show ("您的账号还未启用或已停用,请与管理员联系!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
            Return
        End If
        Forms("登录").close
        Forms("主窗口").Open()
        MainTable = Tables("用户管理")  \'打开主界面表
        e.Form.close
    Else
        MessageBox.Show ("密码错误,请重新输入!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
        Return
    End If
Else
    MessageBox.Show ("部门,姓名,账号不一致,请检查!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Return
End If

\'\'"非自定义登录,可视化授权"代码放在在项目LoadUserSetting事件中。如果项目没有提供切换用户的功能,那么可以直接在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
MessageBox.Show(1)
Tables("授权表").Visible = (User.Type <> UserTypeEnum.User)
If User.Type <> UserTypeEnum.User Then
    Return
End If
MessageBox.Show(2)
For Each dr1 As DataRow In DataTables("授权表").Select("姓名 = \'" & _UserName & "\'")
\'\'For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = \'" & User.Name & "\'" )
MessageBox.Show(3)
    If dr1.IsNull("列名") Then
        For Each t As Table In Tables
            If t.DataTable.Name = dr1("表名") Then
                t.Visible = Not dr1("不可见")
                t.AllowEdit = Not dr1("不可编辑")
            End If
        Next
    Else
        For Each t As Table In Tables
            If t.DataTable.Name = dr1("表名") Then
                For Each c As Col In t.Cols
                    If c.Name = dr1("列名") Then
                        c.Visible = Not dr1("不可见")
                        c.AllowEdit = Not dr1("不可编辑")
                    End If
                Next
            End If
        Next
    End If
Next

\'\'条件加载2
If _UserYhjb = "超级用户" Then \'\'超级用户指"系统管理员"
    DataTables("数据录入表2023").LoadFilter = "" \'如果用户组是超级用户,加载所有行
    DataTables("数据录入表2023").AllowEdit = True \'\'允许编辑数据
ElseIf _UserYhjb = "1级用户" Then          \'\'1级用户指"经理"
    DataTables("数据录入表2023").LoadFilter = "" \'如果用户组是1级用户,则加载所有行
    DataTables("数据录入表2023").AllowEdit = False \'禁止用户修改表中数据,也就是锁定表
ElseIf _UserYhjb = "2级用户" Then    \'2级用户指"主管"则加载包含主管和员工的行
    \'DataTables("数据录入表2023").LoadFilter = "填报单位 like \'%" & _UserGroup & "%\'" \'如果用户组是2级用户,加载本部门单位所有行
    DataTables("数据录入表2023").LoadFilter = "填报单位 = \'" & _UserGroup & "\'" \'如果用户组是2级用户,加载本部门单位所有行
    DataTables("数据录入表2023").AllowEdit = True \'\'允许编辑数据
ElseIf _UserYhjb = "3级用户" Then 
   \' DataTables("数据录入表2023").LoadFilter = "填报人 like \'%" & _UserName & "%\'" \'3级用户指"员工"加载登录者相关行
    DataTables("数据录入表2023").LoadFilter = "填报人 = \'" & _UserName & "\'" \'3级用户指"员工"加载登录者相关行
End If
DataTables("数据录入表2023").Load()


--  作者:有点蓝
--  发布时间:2023/6/25 16:26:00
--  
在什么地方给_UserName赋值的?
--  作者:jhxb8821
--  发布时间:2023/6/25 16:30:00
--  
外部数据库,“用户管理”表中赋值
--  作者:jhxb8821
--  发布时间:2023/6/25 16:44:00
--  
明白了,谢谢老师
--  作者:cd_tdh
--  发布时间:2023/6/26 9:30:00
--  
应该在登录窗口登录成功时赋值,后面才能直接使用。
--  作者:jhxb8821
--  发布时间:2023/6/28 11:21:00
--  代码

Dim b As New CrossTableBuilder("统计表2", DataTables("村庄评比"))

b.HGroups.AddDef("乡镇街道") \'添加客户列用于水平分组

b.HGroups.AddDef("行政村名") \'添加客户列用于水平分组

b.VGroups.AddDef("评比年度") \'添加列用于垂直分组

b.VGroups.AddDef("评比时间") \'添加列用于垂直分组

\'\'b.Totals.AddDef("得分") \'添加列用于统计

b.Totals.AddDef("评比结果", GetType(String), 16)

Row("评比结果") = DataRow("评比结果")

b.Build \'生成统计表

Maintable = Tables("统计表2") \'打开生成的统计表

老师,请帮忙看看红色代码怎么修改?


--  作者:有点蓝
--  发布时间:2023/6/28 11:42:00
--  
这代码想实现什么功能?
--  作者:jhxb8821
--  发布时间:2023/6/28 12:09:00
--  
就是把评比结果放在评比时间下面,比如202306评比结果“合格”;202307“优秀”。