From 08e9239052fb1fb50569b2fb98af16e0fe03145e Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Fri, 4 Sep 2015 13:25:00 +0200 Subject: [PATCH] Use the profile instead of the login name in the view --- include/ac_common.php | 6 +-- include/class_user.php | 5 ++- sql/upgrade.sql | 83 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 88 insertions(+), 6 deletions(-) diff --git a/include/ac_common.php b/include/ac_common.php index c45eb8eb1..1f820c493 100644 --- a/include/ac_common.php +++ b/include/ac_common.php @@ -843,9 +843,9 @@ function show_module($selected) me_code,me_menu,me_url,me_javascript,p_order,me_type,me_description from v_all_menu where - user_name=$1 + p_id=$1 and p_type_display='M' - order by p_order", array($g_user->login)); + order by p_order", array($g_user->get_profile())); if ($selected != -1) { @@ -853,7 +853,7 @@ function show_module($selected) . ' pm_id = $1 ', array($selected)); require_once NOALYSS_INCLUDE.'/template/module.php'; $file = $cn->get_array("select me_file,me_parameter,me_javascript,me_type,me_description from v_all_menu - where pm_id=$1 and user_name=$2", array($selected,$g_user->login)); + where pm_id=$1 and p_id=$2", array($selected,$g_user->get_profile())); if ( count($file ) == 0 ) { echo ''; diff --git a/include/class_user.php b/include/class_user.php index 29a37d9bf..c16630372 100644 --- a/include/class_user.php +++ b/include/class_user.php @@ -545,12 +545,13 @@ class User /** * Check if an user can access a module, return 1 if yes, otherwise 0 * record in audit log + * This function works only if user is connected to a Folder * @param string $p_module menu_ref.me_code */ function check_module($p_module) { - $acc = $this->db->get_value("select count(*) from v_all_menu where user_name = $1 - and me_code=$2", array($this->login, $p_module)); + $acc = $this->db->get_value("select count(*) from v_all_menu where p_id = $1 + and me_code=$2", array($this->get_profile(), $p_module)); if ($acc == 0) { $this->audit("FAIL", $p_module); diff --git a/sql/upgrade.sql b/sql/upgrade.sql index f1718e126..d89c850e6 100644 --- a/sql/upgrade.sql +++ b/sql/upgrade.sql @@ -182,4 +182,85 @@ language plpgsql; select insert_menu(); -drop function insert_menu(); \ No newline at end of file +drop function insert_menu(); + +CREATE OR REPLACE VIEW v_all_menu AS + SELECT pm.me_code, + pm.pm_id, + pm.me_code_dep, + pm.p_order, + pm.p_type_display, + p.p_name, + p.p_desc, + mr.me_menu, + mr.me_file, + mr.me_url, + mr.me_parameter, + mr.me_javascript, + mr.me_type, + pm.p_id, + mr.me_description + FROM profile_menu pm + JOIN profile p ON p.p_id = pm.p_id + JOIN menu_ref mr USING (me_code) + ORDER BY pm.p_order; + +DROP FUNCTION comptaproc.get_profile_menu(text); + +CREATE OR REPLACE FUNCTION comptaproc.get_profile_menu(p_profile integer) + RETURNS SETOF menu_tree AS +$BODY$ +declare + a menu_tree; + e menu_tree; +begin +for a in select me_code,me_description from v_all_menu where p_id=p_profile + and me_code_dep is null and me_type <> 'PR' and me_type <>'SP' +loop + return next a; + + for e in select * from get_menu_tree(a.code,p_profile) + loop + return next e; + end loop; + + end loop; +return; +end; +$BODY$ + LANGUAGE plpgsql ; + +DROP FUNCTION comptaproc.get_menu_tree(text, text); + +CREATE OR REPLACE FUNCTION comptaproc.get_menu_tree(p_code text, p_profile integer) + RETURNS SETOF menu_tree AS +$BODY$ +declare + i menu_tree; + e menu_tree; + a text; + x v_all_menu%ROWTYPE; +begin + for x in select * from v_all_menu where me_code_dep=p_code::text and p_id=p_profile + loop + if x.me_code_dep is not null then + i.code := x.me_code_dep||'/'||x.me_code; + else + i.code := x.me_code; + end if; + + i.description := x.me_description; + + return next i; + + for e in select * from get_menu_tree(x.me_code,p_profile) + loop + e.code:=x.me_code_dep||'/'||e.code; + return next e; + end loop; + + end loop; + return; +end; +$BODY$ + LANGUAGE plpgsql; \ No newline at end of file