Feat: Companies and User permissions added.

This commit is contained in:
2025-08-04 20:44:05 +01:00
parent d3813e987f
commit 3d2b753b79
113 changed files with 3906 additions and 1269 deletions

View File

@@ -6,7 +6,7 @@ DROP PROCEDURE IF EXISTS p_dog_get_many_user;
DELIMITER //
CREATE PROCEDURE p_dog_get_many_user (
CREATE PROCEDURE fetchmetrics.p_dog_get_many_user (
IN a_id_user INT
, IN a_auth0_id_user VARCHAR(200)
, IN a_get_all_user BIT
@@ -15,6 +15,9 @@ CREATE PROCEDURE p_dog_get_many_user (
, IN a_auth0_ids_user TEXT
, IN a_names_user TEXT
, IN a_emails_user TEXT
, IN a_get_all_company BIT
, IN a_get_inactive_company BIT
, IN a_ids_company TEXT
, IN a_require_all_id_search_filters_met BIT
, IN a_require_any_id_search_filters_met BIT
, IN a_require_all_non_id_search_filters_met BIT
@@ -29,14 +32,13 @@ BEGIN
DECLARE v_has_filter_user_name BIT;
DECLARE v_id_access_level_admin INT;
DECLARE v_id_access_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_id_permission_dog_admin INT;
DECLARE v_id_permission_user INT;
DECLARE v_id_permission_user_admin INT;
DECLARE v_id_type_error_bad_data INT;
DECLARE v_ids_permission_required VARCHAR(4000);
DECLARE v_ids_user TEXT;
DECLARE v_is_new BIT;
DECLARE v_is_super_user BIT;
DECLARE v_rank_max INT;
DECLARE v_time_start TIMESTAMP(6);
@@ -96,7 +98,6 @@ BEGIN
SET v_id_permission_user_admin := (SELECT id_permission FROM fetchmetrics.DOG_Permission WHERE code = 'USER_ADMIN' LIMIT 1);
SET v_code_type_error_bad_data := 'BAD_DATA';
SET v_id_type_error_bad_data := (SELECT id_type FROM fetchmetrics.CORE_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
SET v_ids_permission_required := CONCAT(v_id_permission_user, ',', v_id_permission_user_admin, ',', v_id_permission_dog_admin);
SET v_is_new := FALSE;
SET a_get_all_user := IFNULL(a_get_all_user, 1);
@@ -132,10 +133,21 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_User_Access;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Company;
CREATE TEMPORARY TABLE tmp_Company (
id_company INT NOT NULL
, name VARCHAR(250) NOT NULL
, website VARCHAR(1000)
, active BIT NOT NULL
, does_meet_id_filters BIT NOT NULL
, does_meet_non_id_filters BIT NOT NULL
);
CREATE TEMPORARY TABLE tmp_User (
id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_company INT
, id_permission_required INT NOT NULL
, priority_access_level_required INT NOT NULL
, is_super_user BIT
@@ -149,7 +161,7 @@ BEGIN
);
CREATE TEMPORARY TABLE tmp_User_Access (
id_row INT PRIMARY KEY AUTO_INCREMENT NOT NULL
id_temp INT PRIMARY KEY AUTO_INCREMENT NOT NULL
, id_user INT
, id_permission_required INT NOT NULL
, priority_access_level_required INT NOT NULL
@@ -168,136 +180,6 @@ BEGIN
, msg TEXT NOT NULL
);
-- Calculated fields
-- Can admin dog
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM fetchmetrics.DOG_Calc_User_Temp;
END IF;
CALL fetchmetrics.p_dog_calc_user(
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_User (
id_user
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, can_admin_dog
)
SELECT
CALC_USER_T.id_user
, CALC_USER_T.id_permission_required
, CALC_USER_T.priority_access_level_required
, CALC_USER_T.is_super_user
, CALC_USER_T.priority_access_level_user
, CALC_USER_T.has_access
, CALC_USER_T.can_view
, CALC_USER_T.can_edit
, CALC_USER_T.can_admin
, CALC_USER_T.can_admin AS can_admin_dog
FROM fetchmetrics.DOG_Calc_User_Temp CALC_USER_T
WHERE CALC_USER_T.guid = v_guid
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Can admin user
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM fetchmetrics.DOG_Calc_User_Temp;
END IF;
CALL fetchmetrics.p_dog_calc_user(
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
UPDATE tmp_User t_USER
INNER JOIN fetchmetrics.DOG_Calc_User_Temp CALC_USER_T
ON CALC_USER_T.id_user = t_USER.id_user
AND CALC_USER_T.guid = v_guid
SET t_USER.can_admin_user = CALC_USER_T.can_admin
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user( v_guid, FALSE );
END IF;
-- Permissions
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
@@ -319,10 +201,10 @@ BEGIN
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM fetchmetrics.DOG_Calc_User_Temp;
SELECT * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
END IF;
CALL fetchmetrics.p_dog_calc_user(
CALL fetchmetrics.p_dog_calc_user_access(
v_guid -- guid
, 0 -- get_all_user
, 0 -- get_inactive_user
@@ -361,7 +243,7 @@ BEGIN
, CALC_USER_T.can_view
, CALC_USER_T.can_edit
, CALC_USER_T.can_admin
FROM fetchmetrics.DOG_Calc_User_Temp CALC_USER_T
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
WHERE CALC_USER_T.guid = v_guid
;
@@ -386,7 +268,230 @@ BEGIN
;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user( v_guid, FALSE );
CALL fetchmetrics.p_dog_clear_calc_user_access( v_guid, FALSE );
END IF;
SET v_is_super_user := (SELECT IFNULL(t_USER_ACCESS.is_super_user, 0) FROM tmp_User_Access t_USER_ACCESS LIMIT 1);
-- Companies
IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- v_guid
, a_id_user -- a_id_user
, a_get_all_company -- a_get_all_company
, a_get_inactive_company -- a_get_inactive_company
, a_ids_company -- a_ids_company
, a_names_company -- a_names_company
, a_websites_company -- a_websites_company
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL fetchmetrics.p_dog_calc_company (
v_guid -- v_guid
, a_id_user -- a_id_user
, a_get_all_company -- a_get_all_company
, a_get_inactive_company -- a_get_inactive_company
, a_ids_company -- a_ids_company
, NULL -- a_names_company
, NULL -- a_websites_company
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_Company (
id_company
, name
, website
, active
, does_meet_id_filters
, does_meet_non_id_filters
)
SELECT
COMPANY_T.id_company
, COMPANY_T.name
, COMPANY_T.website
, COMPANY_T.active
, COMPANY_T.does_meet_id_filters
, COMPANY_T.does_meet_non_id_filters
FROM fetchmetrics.DOG_Company_Temp COMPANY_T
WHERE COMPANY_T.GUID = v_guid
;
IF a_debug = 1 THEN
SELECT * FROM tmp_Company;
END IF;
END IF;
-- Calculated fields
-- Can admin dog
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_dog_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
INSERT INTO tmp_User (
id_user
, id_company
, id_permission_required
, priority_access_level_required
, is_super_user
, priority_access_level_user
, has_access
, can_view
, can_edit
, can_admin
, can_admin_dog
)
WITH Can_Access_User AS (
SELECT
USER.id_user
, t_COMPANY.id_company
, ROW_NUMBER() OVER (PARTITION BY USER.id_user ORDER BY CASE WHEN t_COMPANY.id_company IS NOT NULL THEN 1 ELSE 0 END DESC) AS index_user_company_link_in_user
FROM fetchmetrics.DOG_User USER
LEFT JOIN fetchmetrics.DOG_User_Company_Link USER_COMPANY_LINK ON USER.id_user = USER_COMPANY_LINK.id_user
LEFT JOIN tmp_Company t_COMPANY ON USER_COMPANY_LINK.id_company = t_COMPANY.id_company
)
SELECT
CALC_USER_T.id_user
, CAN_ACCESS_USER.id_company
, CALC_USER_T.id_permission_required
, CALC_USER_T.priority_access_level_required
, CALC_USER_T.is_super_user
, CALC_USER_T.priority_access_level_user
, CALC_USER_T.has_access
, CALC_USER_T.can_view
, CALC_USER_T.can_edit
, CALC_USER_T.can_admin
, CALC_USER_T.can_admin AS can_admin_dog
FROM fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
/*
LEFT JOIN fetchmetrics.DOG_User_Company_Link USER_COMPANY_LINK ON CALC_USER_T.id_user = USER_COMPANY_LINK.id_user
LEFT JOIN tmp_Company t_COMPANY ON USER_COMPANY_LINK.id_company = t_COMPANY.id_company
*/
INNER JOIN Can_Access_User CAN_ACCESS_USER ON CALC_USER_T.id_user = CAN_ACCESS_USER.id_user
WHERE
CALC_USER_T.guid = v_guid
AND (
v_is_super_user = 1
OR (
CAN_ACCESS_USER.id_company IS NOT NULL
AND CAN_ACCESS_USER.index_user_company_link_in_user = 1
)
)
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access( v_guid, FALSE );
END IF;
-- Can admin user
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN fetchmetrics.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
IF a_debug = 1 THEN
SELECT
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
SELECT * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
END IF;
CALL fetchmetrics.p_dog_calc_user_access(
v_guid -- guid
, a_get_all_user -- get_all_user
, a_get_inactive_user -- get_inactive_user
, a_ids_user -- ids_user
, a_auth0_ids_user -- a_auth0_ids_user
, a_names_user -- a_names_user
, a_emails_user -- a_emails_user
, a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
, a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
, a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
, a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
, v_id_permission_user_admin -- ids_permission
, v_id_access_level_admin -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
UPDATE tmp_User t_USER
INNER JOIN fetchmetrics.DOG_Calc_User_Access_Temp CALC_USER_T
ON CALC_USER_T.id_user = t_USER.id_user
AND CALC_USER_T.guid = v_guid
LEFT JOIN tmp_Company t_COMPANY ON t_USER.id_company = t_COMPANY.id_company
SET t_USER.can_admin_user = CALC_USER_T.can_admin
WHERE
v_is_super_user = 1
OR t_COMPANY.id_company IS NOT NULL
;
IF a_debug = 1 THEN
SELECT * FROM tmp_User;
END IF;
CALL fetchmetrics.p_dog_clear_calc_user_access( v_guid, FALSE );
END IF;
@@ -406,11 +511,17 @@ BEGIN
, USER.surname
, USER.email
, USER.is_email_verified
, USER.is_super_user
, t_USER.can_admin_dog
, t_USER.can_admin_user
, t_USER.id_company
, t_COMPANY.name AS name_company
, t_COMPANY.website AS website_company
, t_USER.is_super_user
, t_USER.priority_access_level_user AS priority_access_level
, t_USER.can_admin_dog
, t_USER.can_admin_user
FROM tmp_User t_USER
-- INNER JOIN tmp_User_Access t_USER_ACCESS
INNER JOIN fetchmetrics.DOG_User USER ON t_USER.id_user = USER.id_user
LEFT JOIN tmp_Company t_COMPANY ON t_USER.id_company = t_COMPANY.id_company
;
# Errors
@@ -438,6 +549,7 @@ BEGIN
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_User_Access;
DROP TEMPORARY TABLE IF EXISTS tmp_User;
DROP TEMPORARY TABLE IF EXISTS tmp_Company;
IF a_debug = 1 THEN
CALL fetchmetrics.p_debug_timing_reporting ( v_time_start );
@@ -447,8 +559,8 @@ DELIMITER ;
/*
select * FROM fetchmetrics.DOG_Calc_User_Temp;
delete FROM fetchmetrics.DOG_Calc_User_Temp;
select * FROM fetchmetrics.DOG_Calc_User_Access_Temp;
delete FROM fetchmetrics.DOG_Calc_User_Access_Temp;
SELECT *
FROM fetchmetrics.DOG_USER;
@@ -463,6 +575,9 @@ CALL fetchmetrics.p_dog_get_many_user(
, 'auth0|6582b95c895d09a70ba10fef' -- :a_auth0_ids_user
, '' -- a_names_user
, '' -- a_emails_user
, '' -- a_ids_company
, 0 -- a_get_all_company
, 0 -- a_get_inactive_company
, 1 -- :a_require_all_id_search_filters_met,
, 1 -- :a_require_any_id_search_filters_met,
, 0 -- :a_require_all_non_id_search_filters_met,