获取用户最终授权了那些报表SQL语句

楼主
我是社区第1886473位番薯,欢迎点我头像关注我哦~

基于FR11.0   有很大的优化空间    时间问题   没有进行优化

 

WITH userinfor AS

 (

 SELECT ID, USERNAME,FULLPATHNAME

   FROM (SELECT A.ID,

                A.REALNAME || '(' || A.USERNAME || ')' USERNAME,

                (SELECT LISTAGG(NAME, '/') WITHIN GROUP(ORDER BY LEVEL DESC)

                   FROM FINE_DEPARTMENT AA

                  WHERE PARENTID IS NOT NULL

                  START WITH ID = D.ID

                 CONNECT BY PRIOR PARENTID = ID) FULLPATHNAME,

                ROW_NUMBER() OVER(PARTITION BY A.ID, A.REALNAME || '(' || A.USERNAME || ')' ORDER BY A.ID) XH

           FROM FINE_USER             A,

                FINE_USER_ROLE_MIDDLE B,

                FINE_DEP_ROLE         C,

                FINE_DEPARTMENT       D

          WHERE A.CREATIONTYPE = 2

            AND B.ROLETYPE = 1

            AND A.ID = B.USERID(+)

            AND B.ROLEID = C.ID(+)

            AND C.DEPARTMENTID = D.ID(+))

  WHERE XH = 1

   ),

   authority AS

     (SELECT NVL(C.USERID, A.ROLEID) USERID,

        A.ALLDEPTID,

        A.ROLETYPE,

        A.AUTHORITY,

        B.EXPANDTYPE,

        B.ID,

        B.DISPLAYNAME

   FROM (SELECT A.ROLEID,

                A.ROLETYPE,

                A.ALLDEPTID,

                B.AUTHORITY,

                B.AUTHORITYENTITYID

           FROM (SELECT A.ID,

                        A.ROLEID,

                        NVL(D.ID, A.ROLEID) ALLROLEID,

                        A.ROLETYPE,

                        C.ALLDEPTID

                   FROM FINE_AUTHORITY A,

                        FINE_DEP_ROLE B,

                        (SELECT SUBSTR(SYS_CONNECT_BY_PATH(ID, '/'),

                                       2,

                                       DECODE(INSTR(SYS_CONNECT_BY_PATH(ID, '/'),

                                                    '/',

                                                    1,

                                                    2) - 1,

                                              -1,

                                              LENGTH(SYS_CONNECT_BY_PATH(ID, '/')),

                                              INSTR(SYS_CONNECT_BY_PATH(ID, '/'),

                                                    '/',

                                                    1,

                                                    2) - 2)) ZERIOID,

                                ID ALLDEPTID

                           FROM FINE_DEPARTMENT A

                          WHERE PARENTID IS NOT NULL

                          START WITH ID = ID

                         CONNECT BY PRIOR PARENTID = ID) C,

                        FINE_DEP_ROLE D

                  WHERE A.ROLEID = B.ID(+)

                    AND B.DEPARTMENTID = C.ZERIOID(+)

                    AND C.ALLDEPTID = D.DEPARTMENTID(+)) A,

                (SELECT ROLEID, AUTHORITY, AUTHORITYENTITYID

                   FROM FINE_AUTHORITY A

                  WHERE A.AUTHORITYENTITYTYPE = 0 --目录权限

                    AND A.AUTHORITYTYPE = 1 --查看权限

                  GROUP BY ROLEID, AUTHORITY, AUTHORITYENTITYID) B

          WHERE A.ALLROLEID = B.ROLEID) A,

        FINE_AUTHORITY_OBJECT B,

        FINE_USER_ROLE_MIDDLE C

  WHERE B.EXPANDTYPE IN ('3', '102') --目录、报表

    AND A.AUTHORITYENTITYID = B.ID

    AND A.ROLEID = C.ROLEID(+)

    AND B.ID <> 'decision-directory-root'--根目录ID

     ),

   authorityinfor AS

    (

     SELECT SUBSTR(SYS_CONNECT_BY_PATH(ID, '/'),2,decode(INSTR(SYS_CONNECT_BY_PATH(ID, '/'),'/',1,2)-1,-1,LENGTH(SYS_CONNECT_BY_PATH(ID, '/')),INSTR(SYS_CONNECT_BY_PATH(ID, '/'),'/',1,2)-2)) zeroid,

            A.ID,

            a.expandtype,

            A.DISPLAYNAME,

            (SELECT LISTAGG(DISPLAYNAME, '/') WITHIN GROUP(ORDER BY LEVEL DESC)

               FROM Fine_Authority_Object aa

              WHERE PARENTID IS NOT NULL

               START WITH ID = A.ID

               CONNECT BY PRIOR PARENTID =AA.ID) REPORTFULLPATH,

            TO_CHAR(A.PATH) modelfllpath,

            LEVEL

       FROM Fine_Authority_Object A

      WHERE PARENTID IS NOT NULL

      START WITH ID = ID

     CONNECT BY PARENTID = PRIOR ID

     ),

     authoritylevel AS

    (

     SELECT A.ID,

            A.DISPLAYNAME,

            LEVEL LEVELNAME

       FROM Fine_Authority_Object A

      WHERE PARENTID IS NOT NULL

      START WITH ID = '2eaccaa7-f149-4ba0-bf45-629abe554f30'--组织架构根节点ID

     CONNECT BY PARENTID = PRIOR ID

     ),

     deptleve AS

     (

       SELECT A.ID,

              A.DISPLAYNAME,

              LEVEL deptleve

       FROM Fine_Department A

      WHERE PARENTID IS NOT NULL

      START WITH ID = '482267473'

     CONNECT BY PARENTID = PRIOR ID

     )

     SELECT USERID,

            USERNAME,

            FULLPATHNAME,

            REPORTID,

            REPORTNAME,

            REPORTFULLPATH,

            modelfllpath

       FROM

     (

     SELECT ID USERID,

            USERNAME,

            FULLPATHNAME,

            REPORTID,

            REPORTNAME,

            REPORTFULLPATH,

            modelfllpath

       FROM

     (

     SELECT a.id,

            a.USERNAME,

            a.FULLPATHNAME,

            b.AUTHORITY,

            C.ID REPORTID,

            C.DISPLAYNAME REPORTNAME,

            c.REPORTFULLPATH,

            D.LEVELNAME,

            c.modelfllpath,

            row_number()OVER(PARTITION BY a.id,c.ID ORDER BY D.LEVELNAME DESC) rn

       FROM userinfor a,

            authority b,

            (SELECT zeroid,ID,DISPLAYNAME,REPORTFULLPATH,modelfllpath FROM authorityinfor WHERE expandtype='102' AND REPORTFULLPATH LIKE ('%国药新疆%'))c,

            authoritylevel D

      WHERE a.id=b.userid(+)

        AND b.id=c.zeroid(+)

        AND B.ID=D.ID(+)

       )

      WHERE RN=1

        AND AUTHORITY=2

        AND REPORTID IS NOT NULL

        )

;

分享扩散:

沙发
发表于 2023-2-22 10:36:01
您好,可以到https://bbs.fanruan.com/wenda提问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1回帖数 1关注人数 3588浏览人数
最后回复于:2023-2-22 10:36

返回顶部 返回列表