finereport如何设计用户权限表,可以满足交差权限场景

业务表:
地区品牌销量
上海A1
上海B2
上海C3
北京A4
北京B5
北京C6
用户表:
用户id用户名
1001张三
1002李四
1003王二
1004赵五

需求:

1.1001权限为:上海地区+全部品牌

2.1002权限为:A品牌+全部地区

3.1003权限为:北京地区+A品牌

4.1004权限为:上海地区+A品牌 && 北京地区+B品牌

如何设计权限表。sql怎么写

用户id用fine_username传递

利用finebi的内置权限配置,生成的sql如下

select * from table a

where 

  (

    a.地区 in ('北京')

    and a.品牌 in ('B')

  )

  or (

   a.地区 in ('上海')

    and a.品牌 in ('B')

  )

or后面的条件不是所有用户都需要,是动态的。麻烦在这里

FineReport Dles 发布于 2022-2-10 14:46 (编辑于 2022-2-10 17:16)
1min目标场景问卷 立即参与
回答问题
悬赏:13 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
shirokoLv6资深互助
发布于2022-2-10 14:59(编辑于 2022-2-11 09:46)

权限表:id,地区权限,品牌权限,为空表示全部,1234分别是

image.png

SELECT * FROM (数据的查询) A LEFT JOIN 权限表 B ON A.地区=NVL(B.地区权限,A.地区) AND A.品牌=NVL(B.品牌权限,A.品牌)

WHERE 1=1

AND B.ID='${fine_username}'

111.gif

===

你的语句里只包含了目标的权限,相当于手动去过滤了权限表,跟下图注释掉一样

image.png

确实会变得快,但是这能算优化吗?事先去过滤权限表也是要时间的,不然事先怎么知道怎么过滤权限表。

  • Dles Dles(提问者) 这样设计权限表,国家和品牌要产生笛卡尔积,数据量大权限表会扩展太多条数据了
    2022-02-10 17:10 
  • Dles Dles(提问者) 看我补充的内容,可以解决笛卡尔积问题。但是如何动态生成where条件就比较麻烦了
    2022-02-10 17:17 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-2-10 14:57

image.png解释一下“+”号意思是:北京地区 且 A品牌还是北京地区 或者 A品牌

最佳回答
0
墨残烛Lv5初级互助
发布于2022-2-10 15:00

select 

    地区,

    品牌,

    销量

from(

    select 地区,品牌,销量 from 业务表

    where 

        '${fine_username}'='1001'

        and 地区="上海"

    union   

    select 地区,品牌,销量 from 业务表

    where 

        '${fine_username}'='1002'

        and 品牌='A'

    union

    select 地区,品牌,销量 from 业务表

    where 

        '${fine_username}'='1003'

        and 地区='北京'

        and 品牌='A'

    union

    select 地区,品牌,销量 from 业务表

    where 

        '${fine_username}'='1004'

        and (地区='上海' and 品牌='A')

        or(地区='北京' and 品牌='B')

)

  • Dles Dles(提问者) 这样写太死了,我们要维护权限表,然后动态关联
    2022-02-10 17:34 
  • 5关注人数
  • 614浏览人数
  • 最后回答于:2022-2-11 09:46
    请选择关闭问题的原因
    确定 取消
    返回顶部