git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@50874 248e525c-4dfb-0310-94bc-949c084e9493

This commit is contained in:
andrew.gilmore
2012-03-19 11:57:19 +00:00
parent 2a0f4900c3
commit 0e9ca75d77
1587 changed files with 500863 additions and 0 deletions

View File

@@ -0,0 +1,371 @@
CREATE OR REPLACE PACKAGE BODY EFT_NOM.role_access IS
--
g_header CONSTANT VARCHAR2(160) := '$Header: /Isle Of Grain/database/PLSQL/role_access.pck 1 7/01/05 12:54 Gilberta $';
g_revision CONSTANT VARCHAR2(160) := '$Revision: 1 $';
--
FUNCTION lineage(p_syop_id system_options.syop_id%TYPE) RETURN VARCHAR2 IS
v_parent_syop_id system_options.syop_id_the_parent_of%TYPE;
v_name system_options.NAME%TYPE;
BEGIN
SELECT syop_id_the_parent_of
,NAME || p_syop_id
INTO v_parent_syop_id
,v_name
FROM system_options
WHERE syop_id = p_syop_id;
IF v_parent_syop_id IS NULL THEN
RETURN(v_name);
ELSE
RETURN(lineage(v_parent_syop_id) || '-' || v_name);
END IF;
EXCEPTION
WHEN no_data_found THEN
RETURN(NULL);
END lineage;
--
FUNCTION f_get_syop_module(p_syop_id IN NUMBER) RETURN VARCHAR2 IS
--
CURSOR cur_syop(p_syop_id IN NUMBER) IS
SELECT syop.module_name
FROM system_options syop
WHERE syop.syop_id = p_syop_id;
--
v_module VARCHAR2(100);
v_dot_pos NUMBER;
--
BEGIN
--
caco_debug.putline('Looking for ' || p_syop_id);
FOR v_syop_rec IN (SELECT module_name
FROM system_options
WHERE syop_id = p_syop_id) LOOP
caco_debug.putline('Found ' || v_syop_rec.module_name);
v_module := v_syop_rec.module_name;
v_dot_pos := instr(v_module
,'.'
,1);
caco_debug.putline('Dot found at ' || v_dot_pos);
IF v_dot_pos > 0 THEN
v_module := substr(v_module
,1
,v_dot_pos - 1);
END IF;
END LOOP;
--
caco_debug.putline('Module is ' || v_module);
RETURN v_module;
--
END f_get_syop_module;
FUNCTION f_get_sypr_role(p_sypr_id IN NUMBER) RETURN VARCHAR2 IS
--
CURSOR cur_sypr(p_sypr_id IN NUMBER) IS
SELECT sypr.role_name
FROM system_profiles sypr
WHERE sypr.sypr_id = p_sypr_id;
--
v_role VARCHAR2(100);
--
BEGIN
--
OPEN cur_sypr(p_sypr_id);
FETCH cur_sypr
INTO v_role;
CLOSE cur_sypr;
--
RETURN v_role;
--
END f_get_sypr_role;
PROCEDURE update_profile_options(p_add_option IN BOOLEAN DEFAULT TRUE
,p_syop_id IN system_options.syop_id%TYPE
,p_sypr_id IN system_profiles.sypr_id%TYPE) IS
v_syop_module system_options.module_name%TYPE;
v_sypr_role system_profiles.role_name%TYPE;
v_grant_or_revoke VARCHAR2(6);
BEGIN
caco_debug.putline('Enter');
IF p_add_option THEN
caco_debug.putline('add');
BEGIN
INSERT INTO profile_options
(syop_id
,sypr_id)
VALUES
(p_syop_id
,p_sypr_id);
--
EXCEPTION
WHEN dup_val_on_index THEN
NULL;
caco_debug.putline('Duplicate');
WHEN OTHERS THEN
caco_debug.putline(SQLERRM);
RAISE;
END;
ELSE
caco_debug.putline('delete');
BEGIN
DELETE profile_options
WHERE syop_id = p_syop_id AND sypr_id = p_sypr_id;
EXCEPTION
WHEN OTHERS THEN
caco_debug.putline(SQLERRM);
RAISE;
END;
END IF;
/*
not required for lightweight users
v_syop_module := upper(f_get_syop_module(p_syop_id));
v_sypr_role := upper(f_get_sypr_role(p_sypr_id));
caco_debug.putline('Module is ' || v_syop_module);
IF v_syop_module IS NOT NULL THEN
IF p_add_option THEN
v_grant_or_revoke := 'GRANT';
ELSE
v_grant_or_revoke := 'REVOKE';
END IF;
caco_debug.putline(v_grant_or_revoke || ' execute on ' || v_syop_module || ' TO ' || v_sypr_role);
EXECUTE IMMEDIATE v_grant_or_revoke || ' EXECUTE ON ' || v_syop_module || ' TO ' || v_sypr_role;
FOR v_oppa_rec IN (SELECT oppa.package_name
FROM option_packages oppa
WHERE upper(package_name) LIKE v_syop_module || '%' AND
upper(package_name) <> upper(v_syop_module)) LOOP
caco_debug.putline(v_grant_or_revoke || ' execute on ' || v_oppa_rec.package_name || ' TO ' || v_sypr_role);
EXECUTE IMMEDIATE v_grant_or_revoke || ' EXECUTE ON ' || v_oppa_rec.package_name || ' TO ' || v_sypr_role;
--
END LOOP;
END IF;*/
caco_debug.putline('Finished');
END update_profile_options;
PROCEDURE startup(p_syop_id IN NUMBER DEFAULT NULL
,p_sypr_id IN NUMBER DEFAULT NULL
,p_function IN VARCHAR2 DEFAULT NULL
,p_readonly IN VARCHAR2 DEFAULT 'N') IS
--
v_dummy VARCHAR2(1);
v_prev_level NUMBER := 0;
v_max_levels NUMBER := 0;
v_number_columns NUMBER := 0;
--
CURSOR cur_sypr IS
SELECT sp.sypr_id
,sp.NAME
FROM system_profiles sp
WHERE role_name IS NOT NULL
ORDER BY sp.sypr_id;
--
CURSOR cur_prop(p_syop_id IN NUMBER, p_sypr_id IN NUMBER) IS
SELECT NULL
FROM profile_options po
WHERE po.syop_id = p_syop_id AND po.sypr_id = p_sypr_id;
--
--
--
BEGIN
--
IF NOT caco_security.security_check('role_access.startup') THEN
RETURN;
END IF;
--
IF p_function IS NOT NULL AND p_syop_id IS NOT NULL AND p_sypr_id IS NOT NULL THEN
--
-- Modify the system profile
--
IF p_function = 'N' THEN
--
update_profile_options(p_add_option => TRUE
,p_syop_id => p_syop_id
,p_sypr_id => p_sypr_id);
ELSIF p_function = 'Y' THEN
update_profile_options(p_add_option => FALSE
,p_syop_id => p_syop_id
,p_sypr_id => p_sypr_id);
END IF;
--
startup;
--
ELSE
--
-- Set document type
--
IF p_readonly = 'N' THEN
htp.p('<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><LINK REL=stylesheet HREF="caco_system.css?p_type=content" >');
ELSE
owa_util.mime_header(ccontent_type => 'application/vnd.ms-excel');
END IF;
--
htp.print(caco_system.menu);
--
htp.title(caco_utilities.GET_SYSTEM_NAME||' module security');
htp.p('<h1>'||caco_utilities.GET_SYSTEM_NAME||' module security</h1>');
--
IF p_readonly = 'N' THEN
--
htp.p('<P>Click on the Y or N to grant or revoke access to roles.</P>');
--
END IF;
--
htp.tableopen(cattributes => 'BORDER=1');
--
-- Set headings
--
htp.tablerowopen;
SELECT MAX(LEVEL)
INTO v_max_levels
FROM system_options t
START WITH syop_id_the_parent_of IS NULL
CONNECT BY PRIOR syop_id = syop_id_the_parent_of;
FOR v_index IN 1 .. v_max_levels LOOP
IF v_index != v_max_levels THEN
htp.tabledata(cvalue => htf.bold('Menu Level ' || v_index));
ELSE
htp.tabledata(cvalue => htf.bold('Screen'));
END IF;
END LOOP;
v_number_columns := v_max_levels;
--
-- Dynamic Headings
--
FOR cur_sypr_rec IN cur_sypr LOOP
--
htp.tabledata(cvalue => htf.bold(cur_sypr_rec.NAME));
v_number_columns := v_number_columns + 1;
--
END LOOP;
--
htp.tablerowclose;
--
-- Print body details
--
v_prev_level := 1;
FOR v_syop_rec IN (SELECT LEVEL
,syop_id
,NAME
,module_name
,syop_id_the_parent_of AS syop_syop_id
,role_access.lineage(syop_id)
,rownum
FROM system_options t
START WITH syop_id_the_parent_of IS NULL
CONNECT BY PRIOR syop_id = syop_id_the_parent_of
ORDER BY role_access.lineage(syop_id)) LOOP
--
htp.tablerowopen;
--
IF v_syop_rec.LEVEL < v_prev_level THEN
--
-- output a blank row
--
htp.tabledata(cvalue => htf.hr
,ccolspan => v_number_columns);
htp.tablerowclose;
htp.COMMENT('Place a blank row');
htp.tablerowopen;
ELSE
v_prev_level := v_syop_rec.LEVEL;
END IF;
FOR v_index IN 1 .. v_max_levels LOOP
IF v_index = v_syop_rec.LEVEL THEN
htp.tabledata(cvalue => v_syop_rec.NAME);
ELSE
htp.tabledata(cvalue => NULL);
END IF;
END LOOP;
--
FOR cur_sypr_rec IN cur_sypr LOOP
--
OPEN cur_prop(v_syop_rec.syop_id
,cur_sypr_rec.sypr_id);
FETCH cur_prop
INTO v_dummy;
--
IF cur_prop%FOUND THEN
--
IF p_readonly = 'N' THEN
--
htp.tabledata(cattributes => 'bgcolor="green"'
,calign => 'center'
,cvalue => htf.anchor2(curl => owa_util.get_cgi_env('SCRIPT_NAME') ||
owa_util.get_cgi_env('PATH_INFO') ||
'?p_syop_id=' || v_syop_rec.syop_id ||
'&p_sypr_id=' || cur_sypr_rec.sypr_id ||
' &p_function=Y'
,ctarget => '_self'
,ctext => 'Y'));
ELSE
--
htp.tabledata(cvalue => htf.paragraph(calign => 'center') || htf.bold(wsgfl.green('X')));
--
END IF;
--
ELSE
--
IF p_readonly = 'N' THEN
--
htp.tabledata(cattributes => 'bgcolor="red"'
,calign => 'center'
,cvalue => htf.anchor2(curl => owa_util.get_cgi_env('SCRIPT_NAME') ||
owa_util.get_cgi_env('PATH_INFO') ||
'?p_syop_id=' || v_syop_rec.syop_id ||
'&p_sypr_id=' || cur_sypr_rec.sypr_id ||
' &p_function=N'
,ctarget => '_self'
,ctext => 'N'));
--
ELSE
--
htp.tabledata(cvalue => htf.paragraph(calign => 'center') || htf.bold(wsgfl.red('&nbsp')));
--
END IF;
--
END IF;
--
CLOSE cur_prop;
--
END LOOP;
--
htp.tablerowclose;
--
END LOOP;
--
htp.tableclose;
--
htp.br;
htp.p('Report Produced ' || to_char(SYSDATE
,'HH24:MI DD/MM/YYYY') || '.');
htp.br;
htp.br;
--
IF p_readonly = 'N' THEN
--
htp.p('To view a read only version of this screen click <A HREF ="' || owa_util.get_cgi_env('SCRIPT_NAME') ||
owa_util.get_cgi_env('PATH_INFO') || '?p_readonly=Y" TARGET="_self">here</A>.');
--
ELSE
--
htp.p('To view an updateable version of this screen click <A HREF ="' ||
owa_util.get_cgi_env('SCRIPT_NAME') || owa_util.get_cgi_env('PATH_INFO') ||
'?p_readonly=N" TARGET="_self">here</A>.');
--
END IF;
--
END IF;
--
EXCEPTION
--
WHEN OTHERS THEN
--
htp.p('ERROR!: ' || SQLERRM);
--
END startup;
--
END role_access;
/