Upload files to "/"
This commit is contained in:
198
prc_26ai_access_control.sql
Normal file
198
prc_26ai_access_control.sql
Normal file
@@ -0,0 +1,198 @@
|
||||
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;
|
||||
/
|
||||
Reference in New Issue
Block a user