以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  按照视频里的做,达不到效果  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=116577)

--  作者:mxy8898
--  发布时间:2018/3/27 11:54:00
--  按照视频里的做,达不到效果
用户管理的窗口:afterload,写入以下代码,窗口绑定在 授权表下

Dim lst As WinForm.ListBox = e.Form.Controls("ListBox1")
lst.ComboList = _UserTable.SQLGetComboListString("Name")
If Lst.Items.Count > 0 Then
    lst.SelectedIndex = 0
End If  \'用户管理

For Each ck As DataRow In DataTables("授权表").Select("分组 = \' " & user.Group & " \' And 表名 = \'" & e.Form.name & " \'")
    e.form.controls(ck("列名")).Visible = Not ck("不可见")
    e.form.controls(ck("列名")).Visible = Not ck("不可编辑")
Next \'将窗口以表名字写入授权表控制


图片点击可在新窗口打开查看此主题相关图片如下:tim截图20180327115138.png
图片点击可在新窗口打开查看



不用管理员登陆,提示错误后,无法进入系统


图片点击可在新窗口打开查看此主题相关图片如下:tim截图20180327092235.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/3/27 11:54:09编辑过]

--  作者:有点甜
--  发布时间:2018/3/27 12:06:00
--  

你逻辑有问题。

 

你授权表,应该有这些列,如 表名、列名、窗口名、控件名、菜单名、功能区、功能组 ......

 

表的权限、窗口的权限、菜单的权限,分开处理的才对。


--  作者:有点甜
--  发布时间:2018/3/27 12:07:00
--  
你提示的错误,应该是你LoadUserSetting事件代码有问题吧?贴出代码看看。
--  作者:mxy8898
--  发布时间:2018/3/27 12:43:00
--  
Tables("授权表").Visible = (User.Type <> UserTypeEnum.User )
If User.Type = UserTypeEnum.User Then
    For Each dr As DataRow In DataTables("授权表").Select("分组 = \'" & User.Group & "\'" )
        If dr.IsNull("列名") Then
            Tables(dr("表名")).Visible = Not dr("不可见")
            Tables(dr("表名")).AllowEdit = Not dr("不可编辑")
        Else
            Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
            Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑") 
        End If
    Next
End If \'权限设置

这个是项目属性里的,只是针对表,可以生效,看视频讲解,在窗口的加载后执行,老师演示效果挺好:窗口事件 afterload
在窗口事件里写的是:
Dim lst As WinForm.ListBox = e.Form.Controls("ListBox1")
lst.ComboList = _UserTable.SQLGetComboListString("Name")
If Lst.Items.Count > 0 Then
    lst.SelectedIndex = 0
End If  \'用户管理

For Each ck As DataRow In DataTables("授权表").Select("分组 = \' " & user.Group & " \' And 表名 = \'" & e.Form.name & " \'")
    e.form.controls(ck("列名")).Visible = Not ck("不可见")
    e.form.controls(ck("列名")).Visible = Not ck("不可编辑")
Next \'将窗口以表名字写入授权表控制

授权被的列是:分组,表名,列名,不可见,不可编辑

下图是视频截图

图片点击可在新窗口打开查看此主题相关图片如下:tim截图20180327125051.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/3/27 12:51:49编辑过]

--  作者:有点甜
--  发布时间:2018/3/27 14:59:00
--  

加入一个【类型】列,标记好此行,是窗口权限、还是表格权限、还是菜单权限

 

For Each dr As DataRow In DataTables("授权表").Select("分组 = \'" & User.Group & "\' and 类型=\'表格\'" )


--  作者:有点甜
--  发布时间:2018/3/27 15:00:00
--  

或者是修改代码

 

For Each dr As DataRow In DataTables("授权表").Select("分组 = \'" & User.Group & "\'" )

    If Tables.Contains(dr("表名")) Then

 

 

   End If

Next


--  作者:mxy8898
--  发布时间:2018/3/27 17:27:00
--  
两种方法都不行,提示找不到****表后,确定系统退出不能进入


好杯具

现在好像权限都失效了。




用户数据绑定到 ACC数据库里,和其他表一个数据,总是提示 格式错误,名称这个键已经是主键了
[此贴子已经被作者于2018/3/27 20:53:26编辑过]

--  作者:有点甜
--  发布时间:2018/3/27 17:31:00
--  

上传你的mdb数据库,不然无法打开项目测试。

 

http://www.foxtable.com/webhelp/scr/1057.htm

 

注意红色代码

 

Tables("授权表").Visible = (User.Type <> UserTypeEnum.User )
If User.Type = UserTypeEnum.User Then
    For Each dr As DataRow In DataTables("授权表").Select("分组 = \'" & User.Group & "\'" )
        If Tables.Contains(dr("表名")) Then
            If dr.IsNull("列名") Then
                Tables(dr("表名")).Visible = Not dr("不可见")
                Tables(dr("表名")).AllowEdit = Not dr("不可编辑")
                RibbonTabs("编辑").Visible = False
            Else
                Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见")
                Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑")
                RibbonTabs("编辑").Visible = True
            End If
        End If
    Next
End If  \'以上为细化权限管理


--  作者:mxy8898
--  发布时间:2018/3/27 17:58:00
--  
授权表格式我重新调整了下
1、权限失效,
   限制每个表功能使用
   限制窗口打开
   限制菜单打开3类
2、第一个表 水质检测原始数据,修改第一列,和最后一列,自动记录修改人,如果用开发模式进去,记录没错,如果正常双击进去,记录人是1
[此贴子已经被作者于2018/3/27 20:52:59编辑过]

--  作者:有点甜
--  发布时间:2018/3/27 18:44:00
--  

1、注意红色代码

 


For Each dr As DataRow In DataTables("授权表").Select("分组 = \'" & _usergroup & "\' ")
    If dr.Isnull("列名") Then
        Tables(dr("表名")).Visible = not dr("不可见")
        Tables(dr("表名")).AllowEdit = not dr("不可编辑")
    Else
        Tables(dr("表名")).cols(dr("列名")).Visible = not dr("不可见")
        Tables(dr("表名")).cols(dr("列名")).AllowEdit = not dr("不可编辑")
    End If
Next

 

2、你不能使用 user.name、user.group, 改成这样_username、_usergroup