Create authorization scheme on demand

This commit is contained in:
Jan Kvetina 2022-01-31 21:18:31 +01:00
parent efba050e09
commit 551a2937a3
4 changed files with 227 additions and 73 deletions

View File

@ -3051,13 +3051,29 @@ wwv_flow_api.create_jet_chart(
,p_data_cursor_behavior=>'auto'
,p_hover_behavior=>'dim'
,p_stack=>'off'
,p_stack_label=>'off'
,p_connect_nulls=>'Y'
,p_value_position=>'auto'
,p_fill_multi_series_gaps=>false
,p_zoom_and_scroll=>'off'
,p_tooltip_rendered=>'Y'
,p_show_series_name=>true
,p_show_group_name=>true
,p_show_value=>true
,p_show_label=>true
,p_show_row=>true
,p_show_start=>true
,p_show_end=>true
,p_show_progress=>true
,p_show_baseline=>true
,p_legend_rendered=>'off'
,p_legend_position=>'auto'
,p_overview_rendered=>'off'
,p_horizontal_grid=>'auto'
,p_vertical_grid=>'auto'
,p_gauge_orientation=>'circular'
,p_gauge_plot_area=>'on'
,p_show_gauge_value=>true
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(10893379331121642)
@ -3073,6 +3089,8 @@ wwv_flow_api.create_jet_chart_series(
,p_marker_shape=>'circle'
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>false
,p_items_label_display_as=>'PERCENT'
,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_series(
p_id=>wwv_flow_api.id(13239592666910332)
@ -3088,6 +3106,8 @@ wwv_flow_api.create_jet_chart_series(
,p_marker_shape=>'circle'
,p_assigned_to_y2=>'off'
,p_items_label_rendered=>false
,p_items_label_display_as=>'PERCENT'
,p_threshold_display=>'onIndicator'
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(10893487984121643)
@ -3102,6 +3122,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_tick_label_rendered=>'on'
,p_tick_label_rotation=>'auto'
,p_tick_label_position=>'outside'
,p_zoom_order_seconds=>false
,p_zoom_order_minutes=>false
,p_zoom_order_hours=>false
,p_zoom_order_days=>false
,p_zoom_order_weeks=>false
,p_zoom_order_months=>false
,p_zoom_order_quarters=>false
,p_zoom_order_years=>false
);
wwv_flow_api.create_jet_chart_axis(
p_id=>wwv_flow_api.id(10893570097121644)
@ -3119,6 +3147,14 @@ wwv_flow_api.create_jet_chart_axis(
,p_major_tick_rendered=>'on'
,p_minor_tick_rendered=>'off'
,p_tick_label_rendered=>'on'
,p_zoom_order_seconds=>false
,p_zoom_order_minutes=>false
,p_zoom_order_hours=>false
,p_zoom_order_days=>false
,p_zoom_order_weeks=>false
,p_zoom_order_months=>false
,p_zoom_order_quarters=>false
,p_zoom_order_years=>false
);
wwv_flow_api.create_page_plug(
p_id=>wwv_flow_api.id(19160020814813939)
@ -3357,6 +3393,18 @@ wwv_flow_api.create_ig_report(
,p_show_row_number=>false
,p_settings_area_expanded=>true
);
wwv_flow_api.component_end;
end;
/
begin
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.7'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_ig_report_view(
p_id=>wwv_flow_api.id(19187082390432768)
,p_report_id=>wwv_flow_api.id(19186860186432768)
@ -3389,18 +3437,6 @@ wwv_flow_api.create_ig_report_column(
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.component_end;
end;
/
begin
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.7'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(19191195748432782)
,p_view_id=>wwv_flow_api.id(19187082390432768)
@ -3715,6 +3751,8 @@ wwv_flow_api.create_region_column(
,p_enable_control_break=>true
,p_enable_hide=>true
,p_is_primary_key=>false
,p_default_type=>'STATIC'
,p_default_expression=>'Y'
,p_duplicate_value=>true
,p_include_in_export=>true
);
@ -4049,22 +4087,26 @@ wwv_flow_api.create_region_column(
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'AUTH_SCHEME'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_HTML_EXPRESSION'
,p_is_query_only=>true
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Auth Scheme'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>30
,p_display_sequence=>40
,p_value_alignment=>'LEFT'
,p_group_id=>wwv_flow_api.id(9809200756099809)
,p_use_group_for=>'BOTH'
,p_attribute_01=>'<span class="&AUTH_SCHEME_ICON."></span>&AUTH_SCHEME.'
,p_attribute_05=>'HTML'
,p_enable_filter=>true
,p_filter_operators=>'C:S:CASE_INSENSITIVE:REGEXP'
,p_filter_is_required=>false
,p_filter_text_case=>'MIXED'
,p_filter_exact_match=>true
,p_filter_lov_type=>'DISTINCT'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
,p_enable_control_break=>true
,p_enable_hide=>true
,p_is_primary_key=>false
,p_duplicate_value=>true
,p_include_in_export=>true
);
wwv_flow_api.create_region_column(
@ -4338,7 +4380,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Role Id'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>10
,p_display_sequence=>20
,p_value_alignment=>'LEFT'
,p_group_id=>wwv_flow_api.id(10890534130121614)
,p_use_group_for=>'BOTH'
@ -4368,7 +4410,7 @@ wwv_flow_api.create_region_column(
,p_item_type=>'NATIVE_DISPLAY_ONLY'
,p_heading=>'Role Group'
,p_heading_alignment=>'LEFT'
,p_display_sequence=>20
,p_display_sequence=>30
,p_value_alignment=>'LEFT'
,p_group_id=>wwv_flow_api.id(10890534130121614)
,p_use_group_for=>'BOTH'
@ -4388,23 +4430,6 @@ wwv_flow_api.create_region_column(
,p_duplicate_value=>true
,p_include_in_export=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(10890168607121610)
,p_name=>'AUTH_SCHEME_ICON'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'AUTH_SCHEME_ICON'
,p_data_type=>'VARCHAR2'
,p_is_query_only=>false
,p_item_type=>'NATIVE_HIDDEN'
,p_display_sequence=>40
,p_attribute_01=>'Y'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
,p_enable_control_break=>true
,p_is_primary_key=>false
,p_duplicate_value=>true
,p_include_in_export=>false
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(10890242854121611)
,p_name=>'AUTH_PROCEDURE_ICON'
@ -4475,6 +4500,35 @@ wwv_flow_api.create_region_column(
,p_duplicate_value=>true
,p_include_in_export=>true
);
wwv_flow_api.create_region_column(
p_id=>wwv_flow_api.id(22085490768580622)
,p_name=>'APP_ID'
,p_source_type=>'DB_COLUMN'
,p_source_expression=>'APP_ID'
,p_data_type=>'NUMBER'
,p_is_query_only=>false
,p_item_type=>'NATIVE_HIDDEN'
,p_display_sequence=>10
,p_attribute_01=>'Y'
,p_use_as_row_header=>false
,p_enable_sort_group=>true
,p_enable_control_break=>true
,p_is_primary_key=>false
,p_duplicate_value=>true
,p_include_in_export=>false
);
wwv_flow_api.component_end;
end;
/
begin
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.7'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_interactive_grid(
p_id=>wwv_flow_api.id(9719050657455643)
,p_internal_uid=>9719050657455643
@ -4503,18 +4557,6 @@ wwv_flow_api.create_interactive_grid(
'}',
''))
);
wwv_flow_api.component_end;
end;
/
begin
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.7'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_ig_report(
p_id=>wwv_flow_api.id(9814006082101179)
,p_interactive_grid_id=>wwv_flow_api.id(9719050657455643)
@ -4660,14 +4702,6 @@ wwv_flow_api.create_ig_report_column(
,p_break_sort_direction=>'ASC'
,p_break_sort_nulls=>'LAST'
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(11018722417000645)
,p_view_id=>wwv_flow_api.id(9814223779101180)
,p_display_seq=>14
,p_column_id=>wwv_flow_api.id(10890168607121610)
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(11019679764000648)
,p_view_id=>wwv_flow_api.id(9814223779101180)
@ -4685,6 +4719,14 @@ wwv_flow_api.create_ig_report_column(
,p_is_frozen=>false
,p_width=>280
);
wwv_flow_api.create_ig_report_column(
p_id=>wwv_flow_api.id(22241762751807378)
,p_view_id=>wwv_flow_api.id(9814223779101180)
,p_display_seq=>16
,p_column_id=>wwv_flow_api.id(22085490768580622)
,p_is_visible=>true
,p_is_frozen=>false
);
wwv_flow_api.create_page_button(
p_id=>wwv_flow_api.id(13501297262936495)
,p_button_sequence=>20
@ -5591,6 +5633,18 @@ wwv_flow_api.create_page_item(
,p_attribute_04=>'TEXT'
,p_attribute_05=>'BOTH'
);
wwv_flow_api.component_end;
end;
/
begin
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.7'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(9901389709658805)
,p_name=>'P920_C038'
@ -5613,18 +5667,6 @@ wwv_flow_api.create_page_item(
,p_attribute_04=>'TEXT'
,p_attribute_05=>'BOTH'
);
wwv_flow_api.component_end;
end;
/
begin
wwv_flow_api.component_begin (
p_version_yyyy_mm_dd=>'2021.04.15'
,p_release=>'21.1.7'
,p_default_workspace_id=>9014660246496943
,p_default_application_id=>770
,p_default_id_offset=>0
,p_default_owner=>'CORE'
);
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(9901427965658806)
,p_name=>'P920_C039'
@ -5926,6 +5968,14 @@ wwv_flow_api.create_page_item(
,p_attribute_09=>'N'
,p_attribute_11=>'Y'
);
wwv_flow_api.create_page_item(
p_id=>wwv_flow_api.id(22085604521580624)
,p_name=>'P920_CREATE_SCHEME'
,p_item_sequence=>10
,p_item_plug_id=>wwv_flow_api.id(9612428039237510)
,p_display_as=>'NATIVE_HIDDEN'
,p_attribute_01=>'Y'
);
wwv_flow_api.create_page_da_event(
p_id=>wwv_flow_api.id(10170943324691484)
,p_name=>'SAVE_ROLES'
@ -6347,6 +6397,25 @@ wwv_flow_api.create_page_process(
,p_attribute_08=>'Y'
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
);
wwv_flow_api.create_page_process(
p_id=>wwv_flow_api.id(22085775413580625)
,p_process_sequence=>10
,p_process_point=>'BEFORE_HEADER'
,p_process_type=>'NATIVE_PLSQL'
,p_process_name=>'ACTION_CREATE_SCHEME'
,p_process_sql_clob=>wwv_flow_string.join(wwv_flow_t_varchar2(
'app_actions.create_auth_scheme (',
' in_app_id => app.get_app_id(),',
' in_name => :P920_AUTH_SCHEME',
');',
'--',
':P920_AUTH_SCHEME := NULL;',
''))
,p_process_clob_language=>'PLSQL'
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
,p_process_when=>'P920_CREATE_SCHEME'
,p_process_when_type=>'ITEM_IS_NOT_NULL'
);
wwv_flow_api.component_end;
end;
/

View File

@ -72,6 +72,20 @@ CREATE OR REPLACE PACKAGE app_actions AS
--
-- Create AUTH scheme in APEX
--
PROCEDURE create_auth_scheme (
in_app_id apex_application_authorization.application_id%TYPE,
in_name apex_application_authorization.authorization_scheme_name%TYPE
);
-- ### Navigation page
--

View File

@ -31,6 +31,71 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
PROCEDURE create_auth_scheme (
in_app_id apex_application_authorization.application_id%TYPE,
in_name apex_application_authorization.authorization_scheme_name%TYPE
)
AS
out_statement VARCHAR2(32767);
BEGIN
app.log_module(in_app_id, in_name);
--
FOR c IN (
SELECT
a.owner AS p_owner,
a.workspace_id AS p_workspace_id,
a.application_id AS p_application_id,
in_name AS p_name,
r.api_compatibility AS p_version,
r.version_no AS p_release,
wwv_flow_id.next_val AS p_id,
--
'RETURN a' || a.application_id || '.' || LOWER(in_name) || '() = ''Y'';' AS p_body
FROM apex_release r
JOIN apex_applications a
ON a.application_id = in_app_id
LEFT JOIN apex_application_authorization z
ON z.application_id = a.application_id
AND z.authorization_scheme_name = in_name
WHERE z.authorization_scheme_name IS NULL
) LOOP
out_statement := out_statement || 'BEGIN' || CHR(10);
out_statement := out_statement || ' wwv_flow_api.component_begin (' || CHR(10);
out_statement := out_statement || ' p_version_yyyy_mm_dd => ''' || c.p_version || '''' || CHR(10);
out_statement := out_statement || ' ,p_release => ''' || c.p_release || '''' || CHR(10);
out_statement := out_statement || ' ,p_default_workspace_id => ' || c.p_workspace_id || CHR(10);
out_statement := out_statement || ' ,p_default_application_id => ' || c.p_application_id || CHR(10);
out_statement := out_statement || ' ,p_default_id_offset => 0' || CHR(10);
out_statement := out_statement || ' ,p_default_owner => ''' || c.p_owner || '''' || CHR(10);
out_statement := out_statement || ' );' || CHR(10);
out_statement := out_statement || ' wwv_flow_api.create_security_scheme (' || CHR(10);
out_statement := out_statement || ' p_id => wwv_flow_api.id(' || c.p_id || ')' || CHR(10);
out_statement := out_statement || ' ,p_name => ''' || c.p_name || '''' || CHR(10);
out_statement := out_statement || ' ,p_scheme_type => ''NATIVE_FUNCTION_BODY''' || CHR(10);
out_statement := out_statement || ' ,p_attribute_01 => wwv_flow_string.join(wwv_flow_t_varchar2(''' || REPLACE(c.p_body, '''', '''''') || '''))' || CHR(10);
out_statement := out_statement || ' ,p_error_message => ''ACCESS_DENIED''' || CHR(10);
out_statement := out_statement || ' ,p_caching => ''BY_USER_BY_PAGE_VIEW''' || CHR(10);
out_statement := out_statement || ' );' || CHR(10);
out_statement := out_statement || ' wwv_flow_api.component_end;' || CHR(10);
out_statement := out_statement || 'END;' || CHR(10);
END LOOP;
--
DBMS_OUTPUT.PUT_LINE(out_statement);
--
IF out_statement IS NOT NULL THEN
EXECUTE IMMEDIATE out_statement;
END IF;
--
app.log_success();
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error();
END;
PROCEDURE nav_remove_pages (
in_page_id navigation.page_id%TYPE := NULL
)

View File

@ -1,10 +1,9 @@
CREATE OR REPLACE VIEW roles_auth_schemes AS
SELECT
a.application_id AS app_id,
MAX(r.role_id) AS role_id,
MAX(r.role_group) AS role_group,
--
a.authorization_scheme_name AS auth_scheme,
NULL AS auth_scheme_icon,
--
MAX(LTRIM(s.object_name || '.' || s.procedure_name, '.')) AS auth_procedure,
--
@ -43,15 +42,22 @@ LEFT JOIN user_procedures s
ON s.procedure_name = a.authorization_scheme_name
AND UPPER(a.attribute_01) LIKE '%' || s.object_name || '.' || s.procedure_name || '%'
WHERE a.application_id = app.get_app_id()
GROUP BY a.authorization_scheme_name
GROUP BY a.application_id, a.authorization_scheme_name
UNION ALL
--
SELECT
r.app_id,
r.role_id,
r.role_group,
--
NULL AS auth_scheme,
'fa fa-warning' AS auth_scheme_icon,
app_actions.get_html_a(
app.get_page_link(920,
in_names => 'P920_CREATE_SCHEME,P920_AUTH_SCHEME',
in_values => 'Y,' || r.role_id
),
app.get_icon('fa-plus-square', 'Create missing Authorization Scheme')
) AS auth_scheme,
--
NULL AS auth_procedure,
'fa fa-warning' AS auth_procedure_icon,
NULL AS auth_source_code,