以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]角色匹配问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132936)

--  作者:martin723
--  发布时间:2019/4/2 16:27:00
--  [求助]角色匹配问题
在系统用户表里面用户对应的角色可以有多个,例如:user1的角色有role1,role2,role3
自己做了个一个权限表,每张表也对应有个角色字段,
sheet1的角色有role2,role4
sheet2对应的角色有role3,role5
sheet3对应角色role4
怎么能将权限表中用户 user1对应的sheet1,sheet2筛选出来

用户表字段 Name,config,角色可以从cofig里面提取
权限表字段 TableName,role
[此贴子已经被作者于2019/4/2 16:30:36编辑过]

--  作者:有点甜
--  发布时间:2019/4/2 16:34:00
--  

合成这样的条件,如

 

"第一列 like \'%role1%\' or 第一列 like \'%role2%\' or 第一列 like \'%role3%\'"

 

也就是把user1循环合成,如

 

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


--  作者:martin723
--  发布时间:2019/4/2 16:57:00
--  
谢谢啦!但这样还有个问题,比如有角色aaa,aa,
如果用户有aa这个角色,表a有aaa这个角色
用户登录的时候,表a也会显示
[此贴子已经被作者于2019/4/2 17:17:57编辑过]

--  作者:有点甜
--  发布时间:2019/4/2 17:42:00
--  

合成这样的条件,如

 

" \',\' + 第一列 + \',\' like \'%,role1,%\' or \',\' + 第一列 + \',\' like \'%,role2,%\' or \',\' + 第一列 + \',\' like \'%,role3,%\'"


--  作者:martin723
--  发布时间:2019/4/2 17:47:00
--  
Dim dtb As New DataTableBuilder("用户临时表")
dtb.AddDef("name", Gettype(String), 32)
dtb.Build()
Dim dr As DataRow
For Each sr As String In user.Roles.Split(",")
DataTables("用户临时表").AddNew
dr("name") = sr
Next

这段代码有什么问题?

--  作者:martin723
--  发布时间:2019/4/2 17:56:00
--  
太难了,没看懂,能直接给个完整的sql语句看看吗?
--  作者:有点甜
--  发布时间:2019/4/2 17:59:00
--  
以下是引用martin723在2019/4/2 17:56:00的发言:
太难了,没看懂,能直接给个完整的sql语句看看吗?

 

 

Dim roles = "A,AA,bb"
Dim str As String = ""
For Each s As String In roles.split(",")
    str &= " or \',\'+第一列+\',\' like \'%," & s & ",%\'"
Next
msgbox(str.SubString(3))


--  作者:martin723
--  发布时间:2019/4/3 8:21:00
--  

第一列前面后面都加上一个逗号是什么意思?没看太懂,正常不是

第一列 like \'%,A,%\'  or 第一列 like \'%,AA,%\'  or 第一列 like \'%,bb,%\'  这样吗:

另外如果加上逗号判断的话,角色前后两个,前面的前面少个逗号,后面的后面少个逗号,会不会落下两个角色
[此贴子已经被作者于2019/4/3 8:27:09编辑过]

--  作者:有点甜
--  发布时间:2019/4/3 8:44:00
--  

认认真真看,照抄代码即可。在【第一列】前后加入逗号以后,再比较筛选

 

Dim roles = "A,AA,bb"
Dim str As String = ""
For Each s As String In roles.split(",")
    str &= " or \',\'+第一列+\',\' like \'%," & s & ",%\'"
Next
msgbox(str.SubString(3))