以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- 关于可视化授权的设置 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=7235)
|
-- 作者:yankunhao
-- 发布时间:2010/5/28 10:27:00
-- 关于可视化授权的设置
在帮助文件中有个可视化授权的说明,我想在那个表中再加一个列,列名为“只能编辑个人数据”的逻辑列,当这个列的值设为真时(项目系统中的每个表都设有一个“新增用户”列和“数据状态”逻辑列,用来记录表中这个记录是由谁新增的及数据的状态),那么这个用户就只能修改属于他新增加的且数据的状态为录入状态的。
要实现这个想法,不知可行否,如果可以,应该用什么样的代码呢?请各位教一下。
|
-- 作者:狐狸爸爸
-- 发布时间:2010/5/28 10:32:00
--
可以,先自己写吧
|
-- 作者:yankunhao
-- 发布时间:2010/5/28 10:38:00
--
以下为我在系统的自定义的登陆窗口的确定按钮的代码:
Dim r As String =e.Form.Controls("ComboBox1").Value Dim mm As String =e.Form.Controls("TextBox1").Value dim kj as string=e.Form.Controls("TextBox2").Value Dim dr As DataRow \'在用户表查找所输入用户名与密码的行 dr = DataTables("用户").Find("[用户] = \'" & r & "\' And [密码] = \'" & mm & "\'") If dr IsNot Nothing Then \'如果找到 if dr("暂停登录")=False then Vars("_UserGroup ") = dr("组") Tables("登陆")(0)("用户名") = r \'与入当前表第一行用户名列为输入用户名 Tables("登陆")(0)("会计期间") = kj Vars("_UserName ") = r \'写入全局变量 e.Form.Close() \'关闭窗口 For Each t As Table In Tables t.Visible = True t.AllowEdit = true t.AllowLockRow = true t.AllowUnlockRow=true For Each c As Col In t.Cols c.Visible = True c.AllowEdit = True Next Next Tables("登陆").Visible = (Vars("_UserGroup ") = "程序开发") Tables("提示").Visible = (Vars("_UserGroup ") = "程序开发") Tables("用户").Visible = (Vars("_UserGroup ") = "程序开发") Tables("授权表").Visible = (Vars("_UserGroup ") = "程序开发") If Vars("_UserGroup ") <> "程序开发" Then For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = \'" & Vars("_UserName ") & "\'" ) If dr1.IsNull("列名") Then Tables(dr1("表名")).Visible = Not dr1("不可见") Tables(dr1("表名")).AllowEdit = Not dr1("不可编辑") Else Tables(dr1("表名")).Cols(dr1("列名")).Visible = Not dr1("不可见") Tables(dr1("表名")).Cols(dr1("列名")).AllowEdit = Not dr1("不可编辑") End If if dr1("可审核")=true then Tables(dr1("表名")).AllowLockRow = true else Tables(dr1("表名")).AllowLockRow = False end if if dr1("可反审核")=true then Tables(dr1("表名")).AllowUnlockRow = true else Tables(dr1("表名")).AllowUnlockRow = false end if if dr1("只能编辑个人数据")=true then
?????(我想在这个地方一次性地设计代码,不用到每个表的相关事件中再去设计代码,不知可否,想不明白啊)
else ?????(我想在这个地方一次性地设计代码,不用到每个表的相关事件中再去设计代码,不知可否,想不明白啊)
end if
Next End If \'for each rb as RibbonMenu.Tab in RibbonTabs \'RibbonTabs是一个菜单集合,可以用for each遍历的 \'rb.Visible = True \'显示菜单 \'Next \'按用户组显示或隐藏菜单项目 \'If Vars("用户组") <> "管理员" Then \' RibbonTabs("DIY")("管理员操作").Visible = False \' RibbonTabs("DIY")("设计员操作").Visible = False \'Else \' RibbonTabs("DIY")("管理员操作").Visible = True \'RibbonTabs("DIY")("设计员操作").Visible = True \'End If maintable=tables("工资录入表") \'登陆成功 Else MessageBox.Show("用户已被暂停使用!,请与管理员联系", "提示", MessageBoxButtons.ok, MessageBoxIcon.Error) e.Form.Controls("TextBox1").Select() \'将输入焦点移到密码文本框中. end if else MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.ok, MessageBoxIcon.Error) e.Form.Controls("TextBox1").Select() \'将输入焦点移到密码文本框中. End If
|
-- 作者:狐狸爸爸
-- 发布时间:2010/5/28 10:55:00
--
一定要用全局变量保存每个表的“只能编辑个人数据”设置,然后再PrepareEdit事件中判断用户名和此变量的值,决定是否允许编辑
|
-- 作者:yankunhao
-- 发布时间:2010/5/28 11:02:00
--
请问,用什么的代码在全局变量中保存每个表的“只能编辑个人数据”设置比较科学好呢?
|
-- 作者:狐狸爸爸
-- 发布时间:2010/5/28 11:15:00
--
随便啊,例如定义全局代码
Public _表A As Boolen
Public _表B As Boolen
你自己的代码,加在If dr IsNot Nothing Then 后面
Select Case dr1("表名")
case "表A"
_表A = dr1("只能编辑个人数据")
case "表B"
_表B = dr1("只能编辑个人数据")
end Select
|
-- 作者:yankunhao
-- 发布时间:2010/5/28 11:44:00
--
哈哈,我想到了个好办法,这个方法不用增加全局变量,就是在全局表的事件中的StartEdit中设置如下代码就能达成目的了:
Select Case e.Table.Name Case "员工资料","工序编码表","工序单价表","工资录入表" For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = \'" & Vars("_UserName ") & "\'" ) if dr1("表名") =e.Table.name AndAlso dr1("只能编辑个人数据")=true then if Vars("_UserName ") <> e.row("修改用户") then e.cancel=true Messagebox.Show("你只能编缉属于你自己的数据!,如有疑问,请与管理员联系","提示",MessageBoxButtons.OK, MessageBoxIcon.Information) End If end if next End Select
[此贴子已经被作者于2010-5-28 11:46:44编辑过]
|
-- 作者:狐狸爸爸
-- 发布时间:2010/5/28 11:53:00
--
呵呵,不错,这样是可以,但是每次编辑的时候,都要检查一下设置,如果是大面积的复制粘贴,会比较慢,不过日常操作没问题的
|
-- 作者:yankunhao
-- 发布时间:2010/5/28 12:06:00
--
另如果我在那个表中再加一个列,列名为“行过滤”的字符列,用来设置用户登录时只显示行过滤条件的数据,就算在系统中想采取筛选也无效,请问又如何做好呢?
|
-- 作者:yankunhao
-- 发布时间:2010/5/28 16:09:00
--
我在BeforeLoadOuterTable事件中设的代码如下,请问这样会有什么错误呢:
Select Case e.DataTableName Case "员工资料","工序编码表","工序单价表","工资录入表" For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = \'" & Vars("_UserName ") & "\'" ) if dr1("表名")=e.DataTableName AndAlso dr1("只加载本部门数据")=true then if e.DataTableName="工资录入表" AndAlso Vars("会计期间") <>"" then e.SelectString = "Select * From {工资录入表} Where [会计期间] = \'" & Vars("会计期间") & "\'and [部门] = \'" & Vars("部门名称") & "\'" else e.SelectString = "Select * From {e.DataTableName} Where [部门] = \'" & Vars("部门名称") & "\'"
End If end if next End Select
|