Role Provisioning
SELECT ue.name, ue.acctKey, ue.userkey, re.rolekey, re.rolename, 'Provision Role' as 'Default_Action_For_Analytics'FROM ( SELECT U.USERNAME AS name, A.ACCOUNTKEY AS acctKey, U.USERKEY AS userkey, GROUP_CONCAT(DISTINCT E.ENTITLEMENT_VALUEKEY) AS MATCHING_ENTITLEMENT_KEY FROM USERS U JOIN USER_ACCOUNTS UA ON U.USERKEY = UA.USERKEY JOIN ACCOUNTS A ON UA.ACCOUNTKEY = A.ACCOUNTKEY JOIN ACCOUNT_ENTITLEMENTS1 AE ON A.ACCOUNTKEY = AE.ACCOUNTKEY JOIN ENTITLEMENT_VALUES E ON AE.ENTITLEMENT_VALUEKEY = E.ENTITLEMENT_VALUEKEY WHERE A.ENDPOINTKEY = 178 GROUP BY U.USERKEY, A.ACCOUNTKEY, U.USERNAME ) ue JOIN ( SELECT R.ROLEKEY, R.ROLE_NAME AS rolename, GROUP_CONCAT(DISTINCT RE.ENTITLEMENT_VALUEKEY) AS MATCHING_ENTITLEMENT_KEY FROM ROLES R JOIN ROLE_ENTITLEMENTS RE ON R.ROLEKEY = RE.ROLEKEY WHERE R.ENDPOINTKEY = 178 GROUP BY R.ROLEKEY, R.ROLE_NAME ) re ON NOT EXISTS ( SELECT 1 FROM ( SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(re.MATCHING_ENTITLEMENT_KEY, ',', n.n), ',', -1)) AS val FROM ( SELECT 1 AS n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 ) n WHERE n.n <= LENGTH(re.MATCHING_ENTITLEMENT_KEY) - LENGTH(REPLACE(re.MATCHING_ENTITLEMENT_KEY, ',', '')) + 1 ) role_val WHERE FIND_IN_SET(role_val.val, ue.MATCHING_ENTITLEMENT_KEY) = 0 ) LEFT JOIN ROLE_USER_ACCOUNT RUA ON RUA.USERKEY = ue.userkey AND RUA.ROLEKEY = re.rolekey WHERE RUA.ROLEKEY IS NULL;
Comments
Post a Comment