以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  用户权限问题请教  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135033)

--  作者:huizhong
--  发布时间:2019/5/15 15:31:00
--  用户权限问题请教
老师,请教个问题

我有一个资产管理主表,其为公司资产管理基础表,表内是公司资产明细,对于每一项资产而言,有“使用者”及“所有者”,如果是本公司采购资产仍由本公司使用,则“使用者”及“所有者”均为本公司,如果本公司采购但借给B公司使用,则“使用者”为B公司,“所有者”为本公司,以上是关于“所有者”及“使用者”的列属性介绍

我在项目事件中设置加载代码如下:
DataTables("资产管理主表").LoadFilter = "\',\' + 公司标记组 + \',\' like \'%," & User.Roles.replace(",", "\',\'") & ",%\'"
以此保证当本公司的人员登录后,无论“所有者”还是“使用者”,涉及本公司的均会加载

请教内容如下:
我在设置用户权限时,如果,只设置单一公司权限,系统正常使用,数据加载正常,但是,当某员工是双重身份或三重身份,也就是,某员工同时管理两家或三家公司时,在权限中选定两家或三家公司后,登录系统后不加载任何数据,请老师给指导下,看看代码应做如何修改

--  作者:有点甜
--  发布时间:2019/5/15 15:50:00
--  

dim filter as string = "1=2"

for each s as string in user.roles.split(",")

    filter &= " or \',\' + 公司标记组 + \',\' like \'%," & s & ",%\'"

next

msgbox(filter)

DataTables("资产管理主表").LoadFilter = filter


--  作者:huizhong
--  发布时间:2019/5/15 15:55:00
--  
谢谢老师
--  作者:huizhong
--  发布时间:2019/5/16 12:10:00
--  
老师帮我看看以下代码哪里有问题,在用管理员登录时报错
代码如下:
If User.Group = "单独执行" Then
    DataTables("项目基础表").LoadFilter = "公司标记 in (\'" & User.Roles.replace(",", "\',\'") & "\')"
    DataTables("收入明细录入台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("成本明细录入台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("财务收支台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("发票台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("员工档案").LoadFilter = "公司标记 in (\'" & User.Roles.replace(",", "\',\'") & "\')"
    DataTables("公司档案").LoadFilter = "公司标记 in (\'" & User.Roles.replace(",", "\',\'") & "\')"
    DataTables("资产管理主表").LoadFilter = "[_Identify] Is Null" \'不加载任何数据
    DataTables("电台广告排期录入表").LoadFilter = ""
ElseIf User.Group = "单独业务" Then
    DataTables("项目基础表").LoadFilter = "公司标记 in (\'" & User.Roles.replace(",", "\',\'") & "\')"
    DataTables("收入明细录入台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("成本明细录入台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("财务收支台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("发票台账").LoadFilter = "\',\' + 执行人姓名 + \',\' like \'%," & user.Name & ",%\'"
    DataTables("员工档案").LoadFilter = "公司标记 in (\'" & User.Roles.replace(",", "\',\'") & "\')"
    DataTables("公司档案").LoadFilter = "公司标记 in (\'" & User.Roles.replace(",", "\',\'") & "\')"
    DataTables("资产管理主表").LoadFilter = "[_Identify] Is Null" \'不加载任何数据
    DataTables("电台广告排期录入表").LoadFilter = ""
Else
    Dim filter As String = "1=2"
    For Each s As String In user.roles.split(",")
        filter &= " or \',\' + 公司标记 + \',\' like \'%," & s & ",%\'"
    Next
    DataTables("项目基础表").LoadFilter = filter
    DataTables("收入明细录入台账").LoadFilter = filter
    DataTables("成本明细录入台账").LoadFilter = filter
    DataTables("财务收支台账").LoadFilter = filter
    DataTables("发票台账").LoadFilter = filter
    DataTables("员工档案").LoadFilter = filter
    DataTables("公司档案").LoadFilter = filter
    DataTables("资产管理主表").LoadFilter = filter
    DataTables("电台广告排期录入表").LoadFilter = ""
End If

DataTables("项目基础表").Load()
DataTables("收入明细录入台账").Load()
DataTables("成本明细录入台账").Load()
DataTables("财务收支台账").Load()
DataTables("发票台账").Load()
DataTables("员工档案").Load()
DataTables("公司档案").Load()
DataTables("资产管理主表").Load()
DataTables("电台广告排期录入表").Load()
StatusBar.Message3 = Date.Today & "  " &  User.Name
vars("YHM") = user.name \'将登陆用户名赋值给YHM,报表或其他位置中有引用


报错内容如下:
.NET Framework 版本:2.0.50727.8940
Foxtable 版本:2018.10.9.1
错误所在事件:项目,LoadUserSetting
详细错误信息:
未将对象引用设置到对象的实例。

--  作者:有点甜
--  发布时间:2019/5/16 13:26:00
--  

If user.roles = "" then

    msgbox("没有角色")

Else

    \'本来代码

End If


--  作者:huizhong
--  发布时间:2019/5/16 14:55:00
--  
已解决,谢谢老师