关于finedbfine_authority_object表问题

已知 图里的角色有管理报表目录下的所有报表权限,fine_authority_object表里为什么只会存一条记录。如果我查出其所有的报表该怎么做

select distinct a.username,a.realname,b.roleid,c.name ,e.parentid,e.displayname,e.path

from  fine_user a

left join fine_user_role_middle b

ON a.id = b.userid

left join FINE_CUSTOM_ROLE c

on c.id = b.roleid

left join fine_authority  d

ON d.roleid = b.roleid

left join FINE_AUTHORITY_OBJECT  e

on e.id = d.authorityentityid

where realname = 'XX'

image.pngimage.png

FineReport Mors 发布于 2021-7-22 15:00 (编辑于 2021-7-22 15:04)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
ycswyw1123Lv6初级互助
发布于2021-7-22 15:08(编辑于 2021-7-22 15:09)

WITH TB AS (

SELECT

obj.ID,

obj.DISPLAYNAME,

obj.PARENTID,

obj.SORTINDEX

FROM

FINE_AUTHORITY_OBJECT obj

CONNECT BY PRIOR obj.PARENTID = obj.ID

START WITH EXISTS (SELECT 1 FROM (SELECT AUTHORITYENTITYID FROM FINE_AUTHORITY WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM FINE_CUSTOM_ROLE WHERE NAME ='${rolename}') A WHERE A.ID=FINE_AUTHORITY.ROLEID) AND AUTHORITY=2) A WHERE A.AUTHORITYENTITYID=obj.ID )

UNION ALL

SELECT

obj.ID,

obj.DISPLAYNAME,

obj.PARENTID,

obj.SORTINDEX

FROM

FINE_AUTHORITY_OBJECT obj

CONNECT BY PRIOR obj.ID = obj.PARENTID

START WITH EXISTS (SELECT 1 FROM (SELECT AUTHORITYENTITYID FROM FINE_AUTHORITY WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM FINE_CUSTOM_ROLE WHERE NAME ='${rolename}') A WHERE A.ID=FINE_AUTHORITY.ROLEID) AND AUTHORITY=2) A WHERE A.AUTHORITYENTITYID=obj.ID )

)

SELECT DISTINCT * FROM TB WHERE ID <> 'decision-directory-root' AND ID <> 'decision-homepage-root' ORDER BY SORTINDEX

image.png

  • Mors Mors(提问者) 这是oracle的吗
    2021-07-22 15:15 
  • ycswyw1123 ycswyw1123 回复 Mors(提问者) 是的
    2021-07-22 15:29 
  • Mors Mors(提问者) 回复 ycswyw1123 finedb不是hsql吗
    2021-07-22 15:41 
  • ycswyw1123 ycswyw1123 回复 Mors(提问者) 我这边用的外置数据库,表都迁到oracle数据库了
    2021-07-22 15:44 
最佳回答
0
luojian0323Lv7资深互助
发布于2021-7-22 15:03

sql放上来。你这个明显是多表关联查询的结果,

  • Mors Mors(提问者) 已放上
    2021-07-22 15:04 
  • Mors Mors(提问者) select distinct a.username,a.realname,b.roleid,c.name ,e.parentid,e.displayname,e.path from fine_user a left join fine_user_role_middle b ON a.id = b.userid left join FINE_CUSTOM_ROLE c on c.id = b.roleid left join fine_authority d ON d.roleid = b.roleid left join FINE_AUTHORITY_OBJECT e on e.id = d.authorityentityid where realname = \'XX\'
    2021-07-22 15:07 
最佳回答
0
杨朝健Lv5中级互助
发布于2021-7-22 15:26(编辑于 2021-7-22 15:43)

取fine_authority d on d.roleid = b.roleid

and authorityEntityType = 0 -- 目录权限

and authority = 2 -- 允许

and authoritytype= 1 -- 查看

这个AUTHORITYENTITYID分2种,报表和目录

1.报表 和FINE_AUTHORITY_OBJECT的ID关联取到报表信息

2.目录 和FINE_AUTHORITY_OBJECT的parentid关联,取到的结果也分报表和目录

2.1 报表 

EXPANDTYPE=102为报表

2.2 目录

EXPANDTYPE=3为目录,ID为目录ID,重复2步骤

还要减去 目录授权了,但是目录下的某模板或目录没授权的

减去的模板或目录如下,可在2步骤时做判断过滤

取fine_authority d on d.roleid = b.roleid

and authorityEntityType = 0 -- 目录权限

and authority = 1 -- 拒绝

and authoritytype= 1 -- 查看

  • 4关注人数
  • 491浏览人数
  • 最后回答于:2021-7-22 15:43
    请选择关闭问题的原因
    确定 取消
    返回顶部