198 lines
6.2 KiB
SQL
198 lines
6.2 KiB
SQL
create or replace procedure prc_26ai_access_control
|
|
as
|
|
v_workspace varchar2(20) := 'AICHAT1';
|
|
v_default_schema varchar2(20) := 'AICHAT1';
|
|
v_app_alias varchar2(20) := '26ai Demo Hub';
|
|
|
|
v_workspace_id number ;
|
|
v_role_id varchar2(200) := '48398609518762455:48398772342762456'; -- CUIDADO, checar em APEX_APPL_ACL_USERS apos definicao de um user manualmente
|
|
v_error varchar2(4000);
|
|
v_has number;
|
|
begin
|
|
|
|
/*
|
|
Criado por: fernando.leal@oracle.com
|
|
Data: Nov/2025
|
|
Objetivo: agendar rotina para criacao de usuarios no APEX.
|
|
Em telas publicas ainda nao logadas nao é permitido usar este tipo de rotina, por isso, sera assincrona.
|
|
|
|
v1 - rotina para criacao de APEX user assincrono - leal
|
|
|
|
|
|
-- CUIDADO: requer JOB de banco:
|
|
-- CUIDADO: job deve estar associado ao ADMIN em funcao da permissao de criar novo usuario
|
|
|
|
BEGIN
|
|
DBMS_SCHEDULER.create_job (
|
|
job_name => 'job_26ai_access_control',
|
|
job_type => 'PLSQL_BLOCK',
|
|
job_action => 'begin aichat1.prc_26ai_access_control; end;',
|
|
start_date => sysdate,
|
|
repeat_interval => 'freq=secondly;',
|
|
enabled => TRUE);
|
|
END;
|
|
|
|
-- Pagina 9999 possui comandos de controle sobre tabela tb_26ai_access_control
|
|
|
|
*/
|
|
|
|
-- Descobrir o ID do workspace onde está a credencial
|
|
SELECT workspace_id
|
|
into v_workspace_id
|
|
FROM apex_workspaces
|
|
WHERE workspace = v_workspace;
|
|
|
|
-- Ativar o contexto APEX
|
|
-- CUIDADO pois esta sendo executado via rotina de banco, e nao via APEX, por isso, o contexto do workspace
|
|
apex_util.set_security_group_id(v_workspace_id);
|
|
|
|
-- para casos com recriacao do user / reset
|
|
for r1 in (select *
|
|
from tb_26ai_access_control
|
|
where CREATED_STATUS = 'E' ) loop
|
|
|
|
begin
|
|
APEX_UTIL.REMOVE_USER( p_user_name => r1.USERNAME );
|
|
exception
|
|
when others then
|
|
null;
|
|
end;
|
|
|
|
APEX_UTIL.CREATE_USER(
|
|
p_user_name => r1.USERNAME,
|
|
p_email_address => lower(r1.EMAIL),
|
|
p_web_password => r1.INITIAL_PWD,
|
|
p_change_password_on_first_use => 'Y', -- cuidado
|
|
p_default_schema => v_default_schema
|
|
);
|
|
|
|
begin
|
|
|
|
delete APEX_APPL_ACL_USERS
|
|
where USER_NAME_LC = lower(r1.USERNAME);
|
|
|
|
insert into APEX_APPL_ACL_USERS(WORKSPACE_ID,
|
|
WORKSPACE,
|
|
WORKSPACE_DISPLAY_NAME,
|
|
APPLICATION_ID,
|
|
APPLICATION_NAME,
|
|
WORKING_COPY_NAME,
|
|
USER_NAME,
|
|
USER_NAME_LC,
|
|
ROLE_IDS,
|
|
ROLE_NAMES)
|
|
values(v_workspace_id, --:WORKSPACE_ID,
|
|
v_workspace,
|
|
v_workspace,
|
|
r1.app_id, --:APP_ID,
|
|
v_app_alias, -- :APP_ALIAS,
|
|
null,
|
|
r1.USERNAME,
|
|
lower(r1.USERNAME),
|
|
v_role_id,
|
|
'Contributor, Reader');
|
|
|
|
|
|
/*
|
|
ou
|
|
|
|
-- Atribui role no app destino
|
|
apex_acl.add_user_role(
|
|
p_application_id => r.id,
|
|
p_user_name => r.user_name,
|
|
p_role_static_id => r.role_static_id
|
|
);
|
|
|
|
*/
|
|
|
|
exception
|
|
when others then
|
|
null;
|
|
end;
|
|
|
|
update tb_26ai_access_control
|
|
set CREATED_STATUS = 'Y'
|
|
where USERNAME = r1.USERNAME
|
|
and CREATED_STATUS = 'E'; -- cuidado
|
|
|
|
end loop;
|
|
|
|
|
|
for r1 in (select *
|
|
from tb_26ai_access_control
|
|
where CREATED_STATUS = 'N' ) loop
|
|
|
|
begin
|
|
|
|
--- begin
|
|
--- APEX_UTIL.REMOVE_USER( p_user_name => r1.USERNAME );
|
|
-- exception
|
|
-- when others then
|
|
-- null;
|
|
--- end;
|
|
|
|
select count(1)
|
|
into v_has
|
|
from APEX_APPL_ACL_USERS
|
|
where USER_NAME_LC = lower(r1.USERNAME);
|
|
|
|
if v_has = 0 then
|
|
|
|
APEX_UTIL.CREATE_USER(
|
|
p_user_name => r1.USERNAME,
|
|
p_email_address => lower(r1.EMAIL),
|
|
p_web_password => r1.INITIAL_PWD,
|
|
p_change_password_on_first_use => 'Y', -- cuidado
|
|
p_default_schema => v_default_schema
|
|
);
|
|
|
|
begin
|
|
insert into APEX_APPL_ACL_USERS(WORKSPACE_ID,
|
|
WORKSPACE,
|
|
WORKSPACE_DISPLAY_NAME,
|
|
APPLICATION_ID,
|
|
APPLICATION_NAME,
|
|
WORKING_COPY_NAME,
|
|
USER_NAME,
|
|
USER_NAME_LC,
|
|
ROLE_IDS,
|
|
ROLE_NAMES)
|
|
values(v_workspace_id, --:WORKSPACE_ID,
|
|
v_workspace,
|
|
v_workspace,
|
|
r1.app_id, --:APP_ID,
|
|
v_app_alias, -- :APP_ALIAS,
|
|
null,
|
|
r1.USERNAME,
|
|
lower(r1.USERNAME),
|
|
v_role_id,
|
|
'Contributor, Reader');
|
|
exception
|
|
when others then
|
|
null;
|
|
end;
|
|
|
|
update tb_26ai_access_control
|
|
set CREATED_STATUS = 'Y'
|
|
where USERNAME = r1.USERNAME
|
|
and CREATED_STATUS = 'N';
|
|
|
|
end if;
|
|
|
|
exception
|
|
when others then
|
|
v_error := sqlerrm;
|
|
|
|
update tb_26ai_access_control
|
|
set CREATED_STATUS = v_error
|
|
where USERNAME = r1.USERNAME
|
|
and CREATED_STATUS = 'N';
|
|
|
|
end;
|
|
|
|
end loop;
|
|
|
|
commit;
|
|
|
|
end;
|
|
/ |