以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  权限控制不起作用,求助!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89312)

--  作者:ycwk
--  发布时间:2016/8/18 23:05:00
--  权限控制不起作用,求助!
在项目事件 afteropenproject 中写了如下代码:

If user.Group<>"管理员"  Then 
For Each tb As Table In Tables     \'tb轮询每一张表
    \' Dim dr As DataRow 
    \' Dim str="分组名= " & user.group & " And 表名=" & tb.name  & " And 列名 = Nothing"      
     \'MessageBox.Show(str)
     \'dr =DataTables("授权表").sqlfind("分组名=  \'user.group\'  And 表名=  \'tb.name\'  And 列名 = Nothing "  )        \'找到分组名=当前操作员分组,且表名是当前轮询的表名那行   
      Dim drs As List(of DataRow)  =DataTables("授权表").sqlselect("分组名=  \'" & user.group & "\'  And 表名=  \'" & tb.name & "\'"  )        \'找到分组名=当前操作员分组,且表名是当前轮询的表名那行   
      
          If drs.Count > 0 Then     \'如果找到分组名=当前操作员分组  ,且表名是当前轮询表的行
            For Each dr As DataRow In drs 
          \'  MessageBox.show(user.group & tb.name & "找到该行")
                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
           Else      \'如果没有找到该表表名,则该表置为不可见,也不可编辑
                    \' MessageBox.show( user.group & tb.name & "没找到该行")  
              Tables(tb.Name).Visible = False
              Tables(tb.Name).AllowEdit = False 
          End If 
     
Next 


且在"授权表"中,填写如下数据:

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

但是我的  任务跟踪表  是放置在窗口的 table控件中,没有看到锁定标志,也就是说没有起到控制效果。   不知道何故!和窗口有关系吗?  问题是我其它的表又可以,我郁闷了。



--  作者:大红袍
--  发布时间:2016/8/18 23:20:00
--  

 窗口表,是打开的时候,才生成的。

 

 你要在窗口afterLoad事件,也执行一次权限的代码。


--  作者:ycwk
--  发布时间:2016/8/19 8:48:00
--  
我想到过这个问题,所以我在afterproject 事件中,把所有的窗口表都open了,结果有的表可以锁定,有的表不可以。不知何故
--  作者:Hyphen
--  发布时间:2016/8/19 8:55:00
--  
把所有的窗口表都open?汗!

窗口关闭就失效了,还是写到窗口afterLoad事件吧,如果代码通用,可以做成函数调用