Files
partsERP/static/PostgreSQL/600_p_shop_user_eval.sql

731 lines
22 KiB
PL/PgSQL

/*
CALL p_shop_user_eval (
gen_random_uuid(), -- a_guid
'', -- a_id_user
0, -- a_get_inactive_users
'1', -- a_ids_permission
'', -- a_ids_access_level
'1' -- a_ids_product
)
*/
CREATE OR REPLACE PROCEDURE p_shop_user_eval (
IN a_guid UUID,
IN a_id_user INTEGER,
IN a_get_inactive_users BOOLEAN,
IN a_ids_permission INTEGER[],
IN a_ids_access_level INTEGER[],
IN a_ids_product INTEGER[] -- VARCHAR(4000) -- IN a_ids_permutation VARCHAR(4000)
/*
OUT result_errors TABLE (
guid UUID,
id_type INTEGER,
code VARCHAR(50),
msg VARCHAR(4000)
)
*/
-- INOUT a_error_msg TEXT
)
AS $$
DECLARE
v_guid UUID;
v_id_user INTEGER;
v_get_inactive_users BOOLEAN;
v_ids_permission INTEGER[];
v_ids_access_level INTEGER[];
v_ids_product INTEGER[]; -- TEXT; -- VARCHAR(4000); -- IN a_ids_permutation VARCHAR(4000)
v_has_filter_user BOOLEAN;
v_has_filter_permission BOOLEAN;
v_has_filter_access_level BOOLEAN;
-- v_has_filter_permutation BOOLEAN;
v_has_filter_product BOOLEAN;
v_id_permission_product INTEGER;
v_id_permission INTEGER;
-- v_ids_product UUID;
v_id_access_level_view INTEGER;
-- v_id_access_level_product_required INTEGER;
v_priority_access_level_view INTEGER;
v_priority_access_level_edit INTEGER;
v_priority_access_level_admin INTEGER;
v_id_access_level INTEGER;
v_priority_access_level INTEGER;
v_now TIMESTAMP;
v_ids_row_delete UUID;
v_code_error_data VARCHAR(200);
v_id_error_data INTEGER;
v_code_error_permission VARCHAR(200);
-- result_errors REFCURSOR;
-- v_error_msg TEXT := NULL;
BEGIN
-- Parse arguments + get default values
v_guid := COALESCE(a_guid, gen_random_uuid());
v_id_user := CASE WHEN a_id_user IS NULL THEN '' ELSE TRIM(a_id_user) END;
v_get_inactive_users := COALESCE(a_get_inactive_users, FALSE);
v_ids_permission := COALESCE(a_ids_permission, ARRAY[]::INTEGER[]);
v_ids_access_level := COALESCE(a_ids_access_level, ARRAY[]::INTEGER[]);
-- v_ids_permutation := CASE WHEN a_ids_permutation IS NULL THEN '' ELSE TRIM(a_ids_permutation) END;
v_ids_product := COALESCE(a_ids_product, ARRAY[]::INTEGER[]);
v_id_error_data := 1;
v_code_error_data := (SELECT code FROM Shop_Msg_Error_Type WHERE id_type = v_id_error_data);
v_code_error_permission := (SELECT code FROM Shop_Msg_Error_Type WHERE id_type = 2);
v_has_filter_user := (v_id_user <= 0);
v_has_filter_permission := (CARDINALITY(v_ids_permission) > 0);
v_has_filter_access_level := (CARDINALITY(v_ids_access_level) > 0);
/*
v_has_filter_permutation := CASE WHEN v_ids_permutation = '' THEN FALSE ELSE TRUE END;
*/
v_has_filter_product := (CARDINALITY(v_ids_product) = 0);
v_id_access_level_view := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'VIEW' LIMIT 1);
v_priority_access_level_view := (SELECT priority FROM Shop_Access_Level WHERE id_access_level = v_id_access_level_view);
v_priority_access_level_edit := (SELECT priority FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1);
v_priority_access_level_admin := (SELECT priority FROM Shop_Access_Level WHERE code = 'ADMIN' LIMIT 1);
v_id_permission_product := (SELECT v_id_permission FROM Shop_Permission WHERE code = 'SHOP_PRODUCT' LIMIT 1);
-- 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;
-- Permanent Table
CREATE TABLE IF NOT EXISTS Shop_User_Eval_Temp (
id_row INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
guid UUID NOT NULL,
id_user INTEGER,
CONSTRAINT FK_Shop_User_Eval_Temp_id_user
FOREIGN KEY (id_user)
REFERENCES Shop_User (id_user),
id_permission_required INTEGER 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 INTEGER 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 INTEGER 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 INTEGER NULL,
CONSTRAINT FK_Shop_User_Eval_Temp_id_product
FOREIGN KEY (id_product)
REFERENCES Shop_Product (id_product),
/*
id_permutation INTEGER NULL,
CONSTRAINT FK_Shop_User_Eval_Temp_id_permutation
FOREIGN KEY (id_permutation)
REFERENCES parts.Shop_Product_Permutation (id_permutation),
*/
is_super_user BOOLEAN NULL,
priority_access_level_user INTEGER NULL,
/*
CONSTRAINT FK_Shop_User_Eval_Temp_priority_access_level_minimum
FOREIGN KEY (priority_access_level_minimum)
REFERENCES Shop_Access_Level (priority)
*/
can_view BOOLEAN,
can_edit BOOLEAN,
can_admin BOOLEAN, -- DEFAULT 0
name_error VARCHAR(200) NULL
);
-- Temporary tables
CREATE TEMPORARY TABLE tmp_Shop_Product_p_Shop_User_Eval (
id_row INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
id_product INTEGER NOT NULL,
CONSTRAINT FK_tmp_Shop_Product_p_Shop_User_Eval_id_product FOREIGN KEY (id_product)
REFERENCES Shop_Product (id_product),
/*
id_permutation INTEGER NOT NULL,
CONSTRAINT FK_tmp_Shop_Product_p_Shop_User_Eval_id_permutation
FOREIGN KEY (id_permutation)
REFERENCES parts.Shop_Product_Permutation (id_permutation),
*/
id_access_level_required INTEGER NOT NULL,
CONSTRAINT FK_tmp_Shop_Product_p_Shop_User_Eval_id_access_level_required
FOREIGN KEY (id_access_level_required)
REFERENCES Shop_Access_Level (id_access_level),
guid UUID NOT NULL,
rank_product INTEGER NOT NULL
);
/*
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
display_order INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
guid UUID NOT NULL,
id_type INTEGER NOT NULL,
CONSTRAINT FK_tmp_Msg_Error_id_type
FOREIGN KEY (id_type)
REFERENCES Shop_Msg_Error_Type (id_type),
code VARCHAR(50) NOT NULL,
msg VARCHAR(4000) NOT NULL
);
*/
-- Permission IDs
IF v_has_filter_permission THEN
-- CALL p_split(v_ids_permission, ',');
-- Invalid
IF EXISTS (
SELECT UNNEST(v_ids_permission) AS id_permission
EXCEPT
SELECT id_permission FROM Shop_Permission
) THEN -- (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
v_guid,
(SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1),
v_code_error_data,
'Invalid permission IDs: ' || COALESCE(STRING_AGG(ST.substring, ', '), 'NULL')
FROM Split_Temp ST
LEFT JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission
WHERE ISNULL(PERM.id_permission)
;
*/
RAISE EXCEPTION 'Invalid permission IDs: %', (
SELECT STRING_AGG(id_permission, ', ')
FROM (
SELECT UNNEST(v_ids_permission) AS id_permission
EXCEPT
SELECT id_permission FROM Shop_Permission
) Permission
)
USING ERRCODE = '22000'
;
END IF;
-- Inactive
IF EXISTS (
SELECT UNNEST(v_ids_permission) AS id_permission
EXCEPT
SELECT id_permission FROM Shop_Permission
WHERE active
) THEN -- (SELECT PERM.id_permission FROM Split_Temp ST INNER JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission WHERE PERM.active = FALSE) THEN
/*
INSERT INTO tmp_Msg_Error (
guid,
id_type,
code,
msg
)
SELECT
v_guid,
(SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1),
v_code_error_data,
'The following permissions are not active: ' || COALESCE(STRING_AGG(ST.substring, ', '), 'NULL')
FROM Split_Temp ST
INNER JOIN Shop_Permission PERM ON ST.substring = PERM.id_permission
WHERE PERM.active = FALSE
;
*/
RAISE EXCEPTION 'Inactive permission IDs: %', (
SELECT STRING_AGG(id_permission, ', ')
FROM (
SELECT UNNEST(v_ids_permission) AS id_permission
EXCEPT
SELECT id_permission FROM Shop_Permission
WHERE active
) Permission
)
USING ERRCODE = '22000'
;
END IF;
-- Get the permission with the highest priority access level required
v_id_permission := (
SELECT PERMS.id_permission
FROM (
SELECT PERM2.id_permission
FROM Split_Temp ST
INNER JOIN Shop_Permission PERM2 ON ST.substring = PERM2.id_permission
WHERE PERM.active
UNION
SELECT v_id_permission_product
) PERMS
INNER JOIN Shop_Permission PERM1 ON PERMS.id_permission = PERM1.id_permission
INNER JOIN Shop_Access_Level AL ON PERM1.id_access_level_required = AL.id_access_level
ORDER BY AL.priority ASC
LIMIT 1
);
-- DROP TABLE Split_Temp;
ELSIF v_has_filter_product THEN
v_id_permission := v_id_permission_product;
ELSE
/*
INSERT INTO tmp_Msg_Error (
guid,
id_type,
code,
msg
)
VALUES (
v_guid,
(SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1),
v_code_error_data,
'Permission ID required'
)
;
*/
RAISE EXCEPTION 'Permission ID required.'
USING ERRCODE = '22000'
;
END IF;
-- access level
IF v_has_filter_access_level THEN
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 = FALSE
*/
SELECT UNNEST(v_ids_access_level) AS id_access_level
EXCEPT
SELECT id_access_level FROM Shop_Access_Level
) THEN
/*
INSERT INTO tmp_Msg_Error (
guid,
id_type,
code,
msg
)
SELECT
v_guid,
(SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1),
v_code_error_data,
'Invalid access level IDs: ' || STRING_AGG(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)
;
*/
RAISE EXCEPTION 'Invalid access level IDs: %', (
SELECT STRING_AGG(id_access_level, ', ')
FROM (
SELECT UNNEST(v_ids_access_level) AS id_access_level
EXCEPT
SELECT id_access_level FROM Shop_Access_Level
) AL
)
USING ERRCODE = '22000'
;
END IF;
IF EXISTS (
SELECT UNNEST(v_ids_access_level) AS id_access_level
EXCEPT
SELECT id_access_level FROM Shop_Access_Level
WHERE active
) THEN
RAISE EXCEPTION 'Inactive access level IDs: %', (
SELECT STRING_AGG(id_access_level, ', ')
FROM (
SELECT UNNEST(v_ids_access_level) AS id_access_level
EXCEPT
SELECT id_access_level FROM Shop_Access_Level
) AL
)
USING ERRCODE = '22000'
;
END IF;
v_id_access_level := (
SELECT AL.id_access_level
FROM Shop_Access_Level AL
WHERE
AL.active
AND AL.id_access_level = ANY(v_ids_access_level)
ORDER BY AL.priority ASC
LIMIT 1
);
ELSE
v_id_access_level := (
SELECT id_access_level_required AS id_access_level
FROM (
SELECT id_access_level
FROM Shop_Permission PERM
WHERE
PERM.id_permission = v_id_permission
UNION
SELECT v_id_access_level_view AS id_access_level
) PERMS
INNER JOIN Shop_Access_Level AL ON PERMS.id_access_level = AL.id_access_level
ORDER BY AL.priority ASC
LIMIT 1
); -- v_id_access_level_view;
END IF;
v_priority_access_level := (SELECT priority FROM Shop_Access_Level WHERE id_access_level = v_id_access_level);
-- Invalid user ID
IF v_has_filter_user THEN
IF ISNULL((SELECT id_user FROM Shop_User WHERE id_user = v_id_user)) THEN -- NOT v_has_filter_user THEN
/*
INSERT INTO tmp_Msg_Error (
guid,
id_type,
code,
msg
)
VALUES (
v_guid,
(SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1),
v_code_error_data,
'Invalid user ID: ' || COALESCE(v_id_user, 'NULL')
)
;
*/
RAISE EXCEPTION 'Invalid user ID: %', v_id_user
USING ERRCODE = '22000'
;
END IF;
IF ISNULL((SELECT id_user FROM Shop_User WHERE id_user = v_id_user AND active)) THEN
RAISE EXCEPTION 'Inactive user ID: %', v_id_user
USING ERRCODE = '22000'
;
END IF;
END IF;
-- Invalid products
IF v_has_filter_product THEN
-- Invalid product IDs
IF EXISTS (
SELECT UNNEST(v_ids_product) AS id_product
EXCEPT
SELECT id_product FROM Shop_Product
) THEN -- (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
v_guid,
(SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data LIMIT 1),
v_code_error_data,
'Invalid product IDs: ' || COALESCE(STRING_AGG(ST.substring, ', '), 'NULL')
FROM Split_Temp ST
LEFT JOIN Shop_Product P ON ST.substring = P.id_product
WHERE ISNULL(P.id_product)
;
*/
RAISE EXCEPTION 'Invalid product IDs: %', (
SELECT STRING_AGG(id_product, ', ')
FROM (
SELECT UNNEST(v_ids_product) AS id_product
EXCEPT
SELECT id_product FROM Shop_Product
) Product
)
USING ERRCODE = '22000'
;
END IF;
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,
v_guid,
RANK() OVER (ORDER BY C.display_order, P.display_order) AS rank_product
FROM 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, v_ids_product) > 0 -- FIND_IN_SET(PP.id_permutation, v_ids_permutation) > 0
P.id_product = ANY(v_ids_product)
-- 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
;
*/
-- v_has_filter_product := EXISTS (SELECT * FROM tmp_Shop_Product_p_Shop_User_Eval WHERE v_guid = guid);
END IF;
-- User permissions
/*
IF v_has_filter_product THEN
INSERT INTO Shop_User_Eval_Temp (
guid,
id_user,
id_permission_required,
id_product,
-- id_permutation,
priority_access_level_required,
priority_access_level_user,
is_super_user,
can_view,
can_edit,
can_admin
)
SELECT
v_guid,
v_id_user,
v_id_permission AS id_permission_required,
P.id_product,
-- t_P.id_permutation,
CASE WHEN v_priority_access_level <= AL_P.priority THEN v_priority_access_level ELSE AL_P.priority END AS priority_access_level_required,
AL_U.priority AS priority_access_level_user,
U.is_super_user,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN NOT ISNULL(AL_U.priority) AND AL_U.priority <= v_priority_access_level_view AND AL_U.priority <= priority_access_level_required THEN TRUE ELSE FALSE END END AS can_view,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN NOT ISNULL(AL_U.priority) AND AL_U.priority <= v_priority_access_level_edit AND AL_U.priority <= priority_access_level_required THEN TRUE ELSE FALSE END END AS can_edit,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN NOT ISNULL(AL_U.priority) AND AL_U.priority <= v_priority_access_level_admin AND AL_U.priority <= priority_access_level_required THEN TRUE ELSE FALSE END END AS can_admin
FROM Shop_User U
/*
ON U.id_user = v_id_user
AND U.active
*/
LEFT JOIN Shop_User_Role_Link URL
ON U.id_user = URL.id_user
AND URL.active
LEFT JOIN Shop_Role_Permission_Link RPL
ON URL.id_role = RPL.id_role
AND RPL.active
INNER JOIN Shop_Access_Level AL_U
ON RPL.id_access_leveL = AL_U.id_access_level
AND AL_U.active
INNER JOIN tmp_Shop_Product_p_Shop_User_Eval t_P
ON t_P.guid = v_guid
AND AL.id_access_level = t_P.id_access_leveL_required
INNER JOIN Shop_Access_Level AL_P
ON t_P.id_access_leveL_required = AL_P.id_access_level
AND AL_P.active
WHERE
v_guid = t_P.guid
AND U.active
AND U.id_user = v_id_user
;
ELSE
INSERT INTO Shop_User_Eval_Temp (--UE_T
guid,
id_user,
id_permission_required,
priority_access_level_required,
priority_access_level_user,
is_super_user,
can_view,
can_edit,
can_admin
)
SELECT
v_guid,
v_id_user,
v_id_permission AS id_permission_required,
v_priority_access_level AS priority_access_level_required,
AL.priority AS priority_access_level_user,
U.is_super_user,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN NOT ISNULL(AL.priority) AND AL.priority <= v_priority_access_level_view AND AL.priority <= v_priority_access_level THEN TRUE ELSE FALSE END END AS can_view,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN NOT ISNULL(AL.priority) AND AL.priority <= v_priority_access_level_edit AND AL.priority <= v_priority_access_level THEN TRUE ELSE FALSE END END AS can_edit,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN NOT ISNULL(AL.priority) AND AL.priority <= v_priority_access_level_admin AND AL.priority <= v_priority_access_level THEN TRUE ELSE FALSE END END AS can_admin
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_Access_Level AL
ON RPL.id_access_level = AL.id_access_level
AND AL.active
WHERE
U.id_user = v_id_user
AND U.active
AND RPL.id_permission = v_id_permission
ORDER BY AL.priority ASC
;
END IF;
*/
INSERT INTO Shop_User_Eval_Temp (--UE_T
guid,
id_user,
id_permission_required,
id_product,
priority_access_level_required,
priority_access_level_user,
is_super_user,
can_view,
can_edit,
can_admin,
name_error
)
SELECT
v_guid,
v_id_user,
v_id_permission AS id_permission_required,
t_P.id_product,
MIN(v_priority_access_level, AL_P.priority) AS priority_access_level_required,
AL_U.priority AS priority_access_level_user,
U.is_super_user,
(U.is_super_user AND NOT ISNULL(priority_access_level_user) AND priority_access_level_user <= v_priority_access_level_view AND priority_access_level_user <= priority_access_level_required) AS can_view,
(U.is_super_user AND NOT ISNULL(priority_access_level_user) AND priority_access_level_user <= v_priority_access_level_edit AND priority_access_level_user <= priority_access_level_required) AS can_edit,
(U.is_super_user AND NOT ISNULL(priority_access_level_user) AND priority_access_level_user <= v_priority_access_level_admin AND priority_access_level_user <= priority_access_level_required) AS can_admin,
Permission.name || ' ' || (SELECT name FROM Shop_Access_Level WHERE priority = priority_access_level_required ORDER BY id_access_level ASC LIMIT 1) || ' permissions' || CASE WHEN ISNULL(t_P.id_product) THEN '' ELSE ' for product ' || P.name END AS name_error
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_Access_Level AL_U
ON RPL.id_access_level = AL_U.id_access_level
AND AL_U.active
INNER JOIN Shop_Permission Permission
ON RPL.id_permission = Permission.id_permission
AND Permission.active
CROSS JOIN tmp_Shop_Product_p_Shop_User_Eval t_P -- ON t_P.guid = v_guid
INNER JOIN Shop_Product P ON t_P.id_product = P.id_product
INNER JOIN Shop_Access_Level AL_P
ON t_P.id_access_level_required = AL_P.id_access_level
-- AND AL_P.active
WHERE
U.id_user = v_id_user
AND U.active
AND RPL.id_permission = v_id_permission
AND t_P.guid = v_guid
ORDER BY AL_P.priority ASC, t_P.rank_product ASC
;
-- IF EXISTS (SELECT * FROM tmp_Msg_Error WHERE GUID = v_guid) THEN
/*
OPEN result_errors FOR
SELECT *
FROM tmp_Msg_Error
WHERE GUID = v_guid
;
-- RETURN NEXT result_errors;
-- result_errors
a_error_msg := (
SELECT
-- GUID, id_type, code,
msg
FROM tmp_Msg_Error
WHERE GUID = v_guid
LIMIT 1
);
*/
-- 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;
END;
$$ LANGUAGE plpgsql;
/*
CALL p_shop_user_eval (
'56c9dfc1-e22f-11ee-aab4-b42e9986184a', -- v_guid
'', -- v_id_user -- 'auth0|6582b95c895d09a70ba10fef',
false, -- v_get_inactive_users
'4,5', -- v_ids_permission
'1', -- v_ids_access_level
-- null, -- v_ids_product
'1,2,3' -- v_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 TRUE ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_view THEN TRUE ELSE FALSE END END,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_edit THEN TRUE ELSE FALSE END END,
CASE WHEN U.is_super_user THEN TRUE ELSE CASE WHEN priority_access_level_minimum <= v_priority_access_level_admin THEN TRUE ELSE FALSE END END
*/
FROM parts.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
*/