以文本方式查看主题 - 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“优秀”。 |