Foxtable(狐表)用户栏目专家坐堂 → 关于可视化授权的设置


  共有13111人关注过本帖树形打印复制链接

主题:关于可视化授权的设置

帅哥哟,离线,有人找我吗?
yankunhao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1032 积分:7248 威望:0 精华:0 注册:2008/9/1 22:34:00
关于可视化授权的设置  发帖心情 Post By:2010/5/28 10:27:00 [只看该作者]

    在帮助文件中有个可视化授权的说明,我想在那个表中再加一个列,列名为“只能编辑个人数据”的逻辑列,当这个列的值设为真时(项目系统中的每个表都设有一个“新增用户”列和“数据状态”逻辑列,用来记录表中这个记录是由谁新增的及数据的状态),那么这个用户就只能修改属于他新增加的且数据的状态为录入状态的。

 

  要实现这个想法,不知可行否,如果可以,应该用什么样的代码呢?请各位教一下。


 回到顶部
帅哥,在线噢!
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/5/28 10:32:00 [只看该作者]

可以,先自己写吧


 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1032 积分:7248 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By: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


 回到顶部
帅哥,在线噢!
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/5/28 10:55:00 [只看该作者]

一定要用全局变量保存每个表的“只能编辑个人数据”设置,然后再PrepareEdit事件中判断用户名和此变量的值,决定是否允许编辑

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1032 积分:7248 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/5/28 11:02:00 [只看该作者]

请问,用什么的代码在全局变量中保存每个表的“只能编辑个人数据”设置比较科学好呢?


 回到顶部
帅哥,在线噢!
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1032 积分:7248 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/5/28 11:53:00 [只看该作者]

呵呵,不错,这样是可以,但是每次编辑的时候,都要检查一下设置,如果是大面积的复制粘贴,会比较慢,不过日常操作没问题的

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1032 积分:7248 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2010/5/28 12:06:00 [只看该作者]

另如果我在那个表中再加一个列,列名为“行过滤”的字符列,用来设置用户登录时只显示行过滤条件的数据,就算在系统中想采取筛选也无效,请问又如何做好呢?

 回到顶部
帅哥哟,离线,有人找我吗?
yankunhao
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1032 积分:7248 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By: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


 回到顶部
总数 12 1 2 下一页