/* CALL p_shop_user_eval ( UUID(), # a_guid '', # a_ids_user 0, # a_get_inactive_users '1', # a_ids_permission '', # a_ids_access_level '1' # a_ids_product ) */ -- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_user_eval; DELIMITER // CREATE PROCEDURE p_shop_user_eval ( IN a_guid BINARY(36), IN a_ids_user LONGTEXT, IN a_get_inactive_users BIT, IN a_ids_permission VARCHAR(500), IN a_ids_access_level VARCHAR(100), IN a_ids_product VARCHAR(4000) -- IN a_ids_permutation VARCHAR(4000) ) BEGIN -- Variable declaration DECLARE v_has_filter_permission BIT; DECLARE v_has_filter_user BIT; DECLARE v_has_filter_access_level BIT; -- DECLARE v_has_filter_permutation BIT; DECLARE v_has_filter_product BIT; DECLARE v_id_permission_product INT; DECLARE v_id_permission INT; -- DECLARE v_ids_product VARCHAR(500); DECLARE v_id_access_level_view INT; # DECLARE v_id_access_level_product_required INT; DECLARE v_priority_access_level_view INT; DECLARE v_priority_access_level_edit INT; DECLARE v_priority_access_level_admin INT; DECLARE v_id_access_level INT; DECLARE v_priority_access_level INT; DECLARE v_now TIMESTAMP; DECLARE v_ids_row_delete VARCHAR(500); DECLARE v_code_error_data VARCHAR(200); DECLARE v_id_error_data INT; DECLARE v_code_error_permission VARCHAR(200); SET v_id_error_data = 1; SET v_code_error_data := (SELECT code FROM Shop_Msg_Error_Type WHERE id_type = v_id_error_data); SET v_code_error_permission := (SELECT code FROM Shop_Msg_Error_Type WHERE id_type = 2); -- Clear previous proc results # DROP TABLE IF EXISTS tmp_User_Role_Link; # DROP TEMPORARY TABLE IF EXISTS tmp_User_Role_Link; DROP TABLE IF EXISTS tmp_Shop_Product_p_Shop_User_Eval; # DROP TABLE IF EXISTS Shop_User_Eval_Temp; -- Parse arguments + get default values SET a_guid := IFNULL(a_guid, UUID()); SET a_ids_user := TRIM(IFNULL(a_ids_user, '')); SET a_get_inactive_users := IFNULL(a_get_inactive_users, 0); SET a_ids_permission := TRIM(IFNULL(a_ids_permission, '')); SET a_ids_access_level := TRIM(IFNULL(a_ids_access_level, '')); SET a_ids_product := TRIM(IFNULL(a_ids_product, '')); -- Permanent Table CREATE TABLE IF NOT EXISTS Shop_User_Eval_Temp ( id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL, guid BINARY(36) NOT NULL, id_user INT NULL, id_permission_required INT NOT NULL, CONSTRAINT FK_Shop_User_Eval_Temp_id_permission_required FOREIGN KEY (id_permission_required) REFERENCES Shop_Permission (id_permission), /* id_access_level_required INT NOT NULL, CONSTRAINT FK_Shop_User_Eval_Temp_id_access_level_required FOREIGN KEY (id_access_level_required) REFERENCES Shop_Access_Level (id_access_level), */ priority_access_level_required INT NOT NULL, /* CONSTRAINT FK_Shop_User_Eval_Temp_priority_access_level_required FOREIGN KEY (priority_access_level_required) REFERENCES Shop_Access_Level (priority), */ id_product INT NULL, CONSTRAINT FK_Shop_User_Eval_Temp_id_product FOREIGN KEY (id_product) REFERENCES Shop_Product (id_product), /* id_permutation INT NULL, CONSTRAINT FK_Shop_User_Eval_Temp_id_permutation FOREIGN KEY (id_permutation) REFERENCES Shop_Product_Permutation (id_permutation), */ is_super_user BIT NULL, priority_access_level_user INT NULL, /* CONSTRAINT FK_Shop_User_Eval_Temp_priority_access_level_minimum FOREIGN KEY (priority_access_level_minimum) REFERENCES Shop_Access_Level (priority) */ can_view BIT, can_edit BIT, can_admin BIT -- DEFAULT 0 ); CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Shop_Product_p_Shop_User_Eval ( id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL, id_product INT NOT NULL, id_access_level_required INT NOT NULL, guid BINARY(36) NOT NULL, rank_product INT NOT NULL ); CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, guid BINARY(36) NOT NULL, id_type INT NOT NULL, code VARCHAR(50) NOT NULL, msg VARCHAR(4000) NOT NULL ); # select * from Shop_Msg_Error_Type; -- Parse filters IF a_guid IS NULL OR EXISTS (SELECT * FROM Shop_User_Eval_Temp WHERE a_guid = guid) THEN INSERT INTO tmp_Msg_Error ( guid, id_type, code, msg ) VALUES ( a_guid, (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1), v_code_error_data, CONCAT('Invalid guid argument: ', IFNULL(a_guid, 'NULL')) ) ; END IF; SET v_has_filter_user = CASE WHEN a_ids_user = '' THEN 0 ELSE 1 END; SET a_ids_permission = REPLACE(a_ids_permission, '|', ','); SET v_has_filter_permission = CASE WHEN a_ids_permission = '' THEN 0 ELSE 1 END; SET a_ids_access_level = REPLACE(a_ids_access_level, '|', ','); SET v_has_filter_access_level = CASE WHEN a_ids_access_level = '' THEN 0 ELSE 1 END; /* SET a_ids_permutation = REPLACE(a_ids_permutation, '|', ','); SET v_has_filter_permutation = CASE WHEN a_ids_permutation = '' THEN 0 ELSE 1 END; */ SET a_ids_product = REPLACE(a_ids_product, '|', ','); SET v_has_filter_product = CASE WHEN a_ids_product = '' THEN 0 ELSE 1 END; SET v_id_access_level_view = (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'VIEW' LIMIT 1); SET v_priority_access_level_view = (SELECT priority FROM Shop_Access_Level WHERE id_access_level = v_id_access_level_view); SET v_priority_access_level_edit = (SELECT priority FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); SET v_priority_access_level_admin = (SELECT priority FROM Shop_Access_Level WHERE code = 'ADMIN' LIMIT 1); /* select v_priority_access_level_view, v_priority_access_level_edit, v_priority_access_level_admin ; */ IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN IF v_has_filter_access_level THEN CALL p_split(a_ids_access_level, ','); IF EXISTS ( SELECT ST.substring FROM Split_Temp ST LEFT JOIN Shop_Access_Level AL ON ST.substring = AL.id_access_level WHERE ISNULL(AL.id_access_level) OR AL.active = 0 ) THEN INSERT INTO tmp_Msg_Error ( guid, id_type, code, msg ) SELECT a_guid, (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1), v_code_error_data, CONCAT('Invalid access level IDs: ', GROUP_CONCAT(ST.substring SEPARATOR ', ')) FROM Split_Temp ST LEFT JOIN Shop_Access_Level AL ON ST.substring = AL.id_access_level WHERE ISNULL(AL.id_access_level) ; ELSE SET v_id_access_level := ( SELECT AL.id_access_level FROM Split_Temp ST INNER JOIN Shop_Access_Level AL ON CONVERT(ST.substring, DECIMAL(10,0)) = AL.id_access_level AND AL.active ORDER BY AL.priority ASC LIMIT 1 ); END IF; DROP TABLE Split_Temp; /* IF 0 = v_id_access_level OR v_id_access_level <=> NULL THEN # SET v_has_filter_access_level = 0; INSERT INTO tmp_Msg_Error ( guid, code, msg ) SELECT a_guid, v_code_error_data, CONCAT('Invalid access level IDs: ', GROUP_CONCAT(ST.substring SEPARATOR ', ')) FROM Split_Temp ST LEFT JOIN Shop_Access_Level AL ON ST.substring = AL.id_access_level WHERE ISNULL(AL.id_access_level) ; END IF; */ /* select * from Shop_Access_Level END IF; IF NOT v_has_filter_access_level THEN */ ELSE SET v_id_access_level = v_id_access_level_view; END IF; END IF; IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN /* IF v_has_filter_permutation THEN INSERT INTO tmp_Shop_Product_p_Shop_User_Eval ( id_product, id_permutation, id_access_level_required, guid, rank_permutation ) SELECT PP.id_product, PP.id_permutation, PP.id_access_level_required, a_guid, RANK() OVER (ORDER BY PP.id_product, PP.id_permutation, AL.priority) AS rank_permutation FROM Shop_Product_Permutation PP INNER JOIN Shop_Access_Level AL ON PP.id_access_level_required = AL.id_access_level AND AL.active WHERE FIND_IN_SET(PP.id_permutation, a_ids_permutation) > 0 # AND P.active # not worried as we want users to be able to see their order history ; /* DELETE FROM tmp_Shop_Product_p_Shop_User_Eval WHERE rank_permutation > 1 ; * SET v_has_filter_permutation = EXISTS (SELECT * FROM tmp_Shop_Product_p_Shop_User_Eval WHERE a_guid = guid); END IF; IF v_has_filter_permission THEN # Invalid permission IDs IF EXISTS (SELECT id_permission FROM Shop_Permission WHERE FIND_IN_SET(id_permission, a_ids_permission) > 0 AND NOT active) THEN INSERT INTO tmp_Msg_Error ( guid, code, msg ) VALUES ( a_guid, v_code_error_data, CONCAT('The following permissions are no longer active: ', (SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM Shop_Permission WHERE FIND_IN_SET(id_permission, a_ids_permission) > 0 AND NOT active)) ) ; END IF; END IF; */ IF v_has_filter_product THEN CALL p_split(a_ids_product, ','); # Invalid product IDs IF EXISTS (SELECT * FROM Split_Temp ST LEFT JOIN Shop_Product P ON ST.substring = P.id_product WHERE ISNULL(P.id_product)) THEN INSERT INTO tmp_Msg_Error ( guid, id_type, code, msg ) SELECT a_guid, (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1), v_code_error_data, CONCAT('Invalid product IDs: ', IFNULL(GROUP_CONCAT(ST.substring SEPARATOR ', '), 'NULL')) FROM Split_Temp ST LEFT JOIN Shop_Product P ON ST.substring = P.id_product WHERE ISNULL(P.id_product) ; END IF; IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN INSERT INTO tmp_Shop_Product_p_Shop_User_Eval ( id_product, -- id_permutation, id_access_level_required, guid, rank_product -- rank_permutation ) SELECT DISTINCT P.id_product, -- PP.id_permutation, P.id_access_level_required, a_guid, RANK() OVER (ORDER BY C.display_order, P.display_order) AS rank_product FROM Split_Temp ST INNER JOIN Shop_Product P ON ST.substring = P.id_product # Shop_Product_Permutation PP INNER JOIN Shop_Category C ON P.id_category = C.id_category INNER JOIN Shop_Access_Level AL ON P.id_access_level_required = AL.id_access_level AND AL.active WHERE FIND_IN_SET(P.id_product, a_ids_product) > 0 # FIND_IN_SET(PP.id_permutation, a_ids_permutation) > 0 # AND P.active # not worried as we want users to be able to see their order history ; /* DELETE FROM tmp_Shop_Product_p_Shop_User_Eval WHERE rank_permutation > 1 ; */ SET v_has_filter_product = EXISTS (SELECT * FROM tmp_Shop_Product_p_Shop_User_Eval WHERE a_guid = guid); END IF; DROP TABLE Split_Temp; END IF; END IF; -- Permission IDs IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN IF v_has_filter_permission THEN CALL p_split(a_ids_permission, ','); # Invalid IF EXISTS (SELECT PERM.id_permission FROM Split_Temp ST LEFT JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission WHERE ISNULL(PERM.id_permission)) THEN INSERT INTO tmp_Msg_Error ( guid, id_type, code, msg ) SELECT a_guid, (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1), v_code_error_data, CONCAT('Invalid permission IDs: ', IFNULL(GROUP_CONCAT(ST.substring SEPARATOR ', '), 'NULL')) FROM Split_Temp ST LEFT JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission WHERE ISNULL(PERM.id_permission) ; END IF; # Inactive IF EXISTS (SELECT PERM.id_permission FROM Split_Temp ST INNER JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission WHERE PERM.active = 0) THEN INSERT INTO tmp_Msg_Error ( guid, id_type, code, msg ) SELECT a_guid, (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1), v_code_error_data, CONCAT('The following permissions are not active: ', IFNULL(GROUP_CONCAT(ST.substring SEPARATOR ', '), 'NULL')) FROM Split_Temp ST INNER JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission WHERE PERM.active = 0 ; END IF; DROP TABLE Split_Temp; END IF; END IF; -- Invalid user ID IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN IF v_has_filter_user = 1 THEN /* SET a_ids_user := (SELECT id_user FROM Shop_User WHERE id_user LIKE a_ids_user AND active); SET v_has_filter_user = NOT (a_ids_user <=> NULL); */ IF ISNULL((SELECT id_user FROM Shop_User WHERE id_user LIKE a_ids_user AND active)) THEN -- NOT v_has_filter_user THEN INSERT INTO tmp_Msg_Error ( guid, id_type, code, msg ) VALUES ( a_guid, (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1), v_code_error_data, CONCAT('Invalid user ID: ', IFNULL(a_ids_user, 'NULL')) ) ; SET a_ids_user = NULL; SET v_has_filter_user = 0; ELSE SET v_has_filter_user = 1; END IF; END IF; END IF; -- Get users IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN INSERT INTO Shop_User_Eval_Temp ( guid, id_user, id_permission_required, priority_access_level_required /* priority_access_level_user, is_super_user, can_view, can_edit, can_admin */ ) SELECT a_guid, U.id_user, P.id_permission, AL.priority FROM Shop_Permission P INNER JOIN Shop_Access_Level AL ON P.id_access_level_required = AL.id_access_level AND AL.active CROSS JOIN ( SELECT id_user FROM Shop_User U WHERE 1=1 AND FIND_IN_SET(U.id_user, a_ids_user) > 0 AND U.active ) U WHERE FIND_IN_SET(P.id_permission, a_ids_permission) > 0 ; /* IF v_has_filter_permutation THEN SET v_ids_row_delete := (SELECT GROUP_CONCAT(id_row SEPARATOR ',') FROM Shop_User_Eval_Temp WHERE a_guid = guid); INSERT INTO Shop_User_Eval_Temp ( guid, id_user, id_permission_required, id_product, id_permutation, priority_access_level_required ) SELECT UE_T.guid, UE_T.id_user, UE_T.id_permission_required, t_P.id_product, t_P.id_permutation, CASE WHEN UE_T.priority_access_level_required < AL.priority THEN UE_T.priority_access_level_required ELSE AL.priority END -- UE_T.priority_access_level_required FROM tmp_Shop_Product_p_Shop_User_Eval t_P INNER JOIN Shop_Access_Level AL ON t_P.id_access_leveL_required = AL.id_access_level AND AL.active CROSS JOIN Shop_User_Eval_Temp UE_T ON a_ids_user = UE_T.id_user WHERE a_guid = t_P.guid ; DELETE FROM Shop_User_Eval_Temp WHERE FIND_IN_SET(id_row, v_ids_row_delete) > 0 ; END IF; */ IF v_has_filter_product THEN SET v_ids_row_delete := (SELECT GROUP_CONCAT(id_row SEPARATOR ',') FROM Shop_User_Eval_Temp WHERE a_guid = guid); INSERT INTO Shop_User_Eval_Temp ( guid, id_user, id_permission_required, id_product, -- id_permutation, priority_access_level_required ) SELECT UE_T.guid, UE_T.id_user, UE_T.id_permission_required, t_P.id_product, -- t_P.id_permutation, CASE WHEN UE_T.priority_access_level_required < AL.priority THEN UE_T.priority_access_level_required ELSE AL.priority END -- UE_T.priority_access_level_required FROM tmp_Shop_Product_p_Shop_User_Eval t_P INNER JOIN Shop_Access_Level AL ON t_P.id_access_leveL_required = AL.id_access_level AND AL.active CROSS JOIN Shop_User_Eval_Temp UE_T ON a_ids_user = UE_T.id_user WHERE a_guid = t_P.guid ; DELETE FROM Shop_User_Eval_Temp WHERE FIND_IN_SET(id_row, v_ids_row_delete) > 0 ; END IF; /* INSERT INTO Shop_User_Eval_Temp ( guid, id_user, id_permission_required, # id_access_level_required, priority_access_level_required, priority_access_level_user, is_super_user /* can_view, can_edit, can_admin * ) SELECT a_guid, U.id_user, P.id_permission, AL.priority, /* v_id_permission, v_id_access_level, * MIN(AL.priority), U.is_super_user /* CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_view THEN 1 ELSE 0 END END, CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_edit THEN 1 ELSE 0 END END, CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_admin THEN 1 ELSE 0 END END * FROM Shop_User U INNER JOIN Shop_User_Role_Link URL ON U.id_user = URL.id_user AND URL.active INNER JOIN Shop_Role_Permission_Link RPL ON URL.id_role = RPL.id_role AND RPL.active INNER JOIN Shop_Permission P ON RPL.id_permission = P.id_permission AND P.active INNER JOIN Shop_Access_Level AL ON RPL.id_access_level = AL.id_access_level AND AL.active WHERE U.id_user = a_ids_user AND (a_get_inactive_users OR U.active) AND FIND_IN_SET(P.id_permission, a_ids_permission) > 0 # AND v_id_permission = P.id_permission # AND v_id_access_level = AL.id_access_leveld GROUP BY U.id_user, P.id_permission # , is_super_user ; */ IF v_has_filter_user THEN UPDATE Shop_User_Eval_Temp UE_T INNER JOIN Shop_User U ON UE_T.id_user = U.id_user AND U.active INNER JOIN Shop_User_Role_Link URL ON U.id_user = URL.id_user AND URL.active INNER JOIN Shop_Role_Permission_Link RPL ON URL.id_role = RPL.id_role AND RPL.active INNER JOIN Shop_Access_Level AL ON RPL.id_access_level = AL.id_access_level AND AL.active SET UE_T.priority_access_level_user = AL.priority, UE_T.is_super_user = U.is_super_user, UE_T.can_view = CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN ISNULL(AL.priority) THEN 1 ELSE CASE WHEN AL.priority <= v_priority_access_level_view AND AL.priority <= UE_T.priority_access_level_required THEN 1 ELSE 0 END END END, UE_T.can_edit = CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN NOT ISNULL(AL.priority) AND AL.priority <= v_priority_access_level_edit AND AL.priority <= UE_T.priority_access_level_required THEN 1 ELSE 0 END END, UE_T.can_admin = CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN NOT ISNULL(AL.priority) AND AL.priority <= v_priority_access_level_admin AND AL.priority <= UE_T.priority_access_level_required THEN 1 ELSE 0 END END WHERE UE_T.guid = a_guid AND UE_T.id_user = a_ids_user AND RPL.id_permission = UE_T.id_permission_required # GROUP BY UE_T.id_user ; ELSE UPDATE Shop_User_Eval_Temp UE_T SET UE_T.priority_access_level_user = v_priority_access_level_view, UE_T.is_super_user = 0, UE_T.can_view = (v_priority_access_level_view <= UE_T.priority_access_level_required), UE_T.can_edit = 0, UE_T.can_admin = 0 WHERE UE_T.guid = a_guid AND UE_T.id_user = a_ids_user # GROUP BY UE_T.id_user ; END IF; END IF; IF EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid) THEN SELECT * FROM tmp_Msg_Error WHERE GUID = a_guid; END IF; -- select * from tmp_Shop_Product_p_Shop_User_Eval; -- Clean up DROP TABLE IF EXISTS tmp_Shop_Product_p_Shop_User_Eval; # DROP TEMPORARY TABLE IF EXISTS tmp_User_Role_Link; # DROP TABLE IF EXISTS tmp_Msg_Error; DROP TABLE IF EXISTS Split_Temp; END // DELIMITER ; /* CALL p_shop_user_eval ('00550ef3-2bfa-11ef-b83e-b42e9986184a', NULL, 0, '2', '1', '1,2,3,4,5'); SELECT * FROM Shop_User_Eval_Temp ; DROP TABLE Shop_User_Eval_Temp; select CURRENT_USER(); CALL p_shop_user_eval('nips', 'auth0|6582b95c895d09a70ba10fef', 0, '5', '2', '1'); SELECT * FROM Shop_User_Eval_Temp ; DROP TABLE IF EXISTS Shop_User_Eval_Temp; DROP TABLE IF EXISTS tmp_Msg_Error; select * from tmp_Msg_Error; select * from shop_product; CALL p_shop_user_eval ( -- '00550ef3-2bfa-11ef-b83e-b42e9986184a', NULL, 0, '2', '1', '1,2,3,4,5,6'); '56c9dfc1-e22f-11ee-aab4-b42e9986184a', # a_guid '', # a_ids_user # 'auth0|6582b95c895d09a70ba10fef', false, # a_get_inactive_users '4,5', # a_ids_permission '1', # a_ids_access_level -- null, # a_ids_product '1,2,3' # a_ids_permutation ); SELECT * FROM Shop_User_Eval_Temp ; DROP TABLE Shop_User_Eval_Temp; SELECT * FROM Shop_Permission ; SELECT * FROM Shop_Access_Level ; SELECT * FROM Shop_Product ; SELECT * FROM Shop_Product_Permutation ; */ /* SELECT 'NOODS' AS guid, U.id_user AS id_user, P.id_permission AS id_permission_required, AL.id_access_level AS id_access_level_required, /* v_id_permission, v_id_access_level, * AL.priority, # MIN(AL.priority), U.is_super_user /* CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_view THEN 1 ELSE 0 END END, CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_edit THEN 1 ELSE 0 END END, CASE WHEN U.is_super_user THEN 1 ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_admin THEN 1 ELSE 0 END END * FROM Shop_User U INNER JOIN Shop_User_Role_Link URL ON U.id_user = URL.id_user AND URL.active INNER JOIN Shop_Role_Permission_Link RPL ON URL.id_role = RPL.id_role AND RPL.active INNER JOIN Shop_Permission P ON RPL.id_permission = P.id_permission AND P.active inner JOIN Shop_Access_Level AL # ON P.id_access_level_required = AL.id_access_level ON RPL.id_access_level = AL.id_access_level AND AL.active WHERE U.id_user = 'auth0|6582b95c895d09a70ba10fef' AND U.active AND FIND_IN_SET(P.id_permission, '1,2') > 0 # AND v_id_access_level = AL.id_access_leveld # GROUP BY U.id_user, P.id_permission, AL.id_access_level # , is_super_user */