如何更改此 Pl/SQL 代码以处理 Apex 中的多个角色?

问题描述 投票:0回答:1

我有 2 个 pl/sql 代码来添加和编辑用户并将其分配给角色。 但是我不知道如何修改这些代码以使Apex接受多个角色。

这是我的ADD_USER

begin

APEX_CUSTOM_AUTH.SET_USER(:P7_USER_NAME);

APEX_ACL.ADD_USER_ROLE (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_id => :P7_USER_ROLE
);
end;

这是我的EDIT_USER

DECLARE

l_as_user_any_role BOOLEAN := false;

BEGIN

l_as_user_any_role := APEX_ACL.HAS_USER_ANY_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME);

if l_as_user_any_role then

APEX_ACL.REPLACE_USER_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_ids => wwv_flow_t_varchar2( :P7_USER_ROLE) );

end if;
end;

现在问题

1 - 如果用户只有 1 个角色,我可以添加和编辑该用户。工作正常。

2 - 如果我尝试为用户分配多个角色,我无法添加或编辑用户。

这是提交时的错误:未找到数据。

任何人都可以帮助纠正我的代码吗?

oracle-apex apex
1个回答
0
投票

您是否尝试使用 apex_t_varchar2 类型作为 p_role_static_ids 参数:

begin
  apex_util.set_workspace(:WORKSPACE);
  apex_acl.add_user_roles(
    -- assigns an array of roles to a user
    p_application_id  => 100,
    p_user_name       => :P7_USER_NAME,
    p_role_static_ids => apex_t_varchar2('USER', 'ADMINISTRATOR')
  );
  commit;
end;
/

您还应该检查您的页面项目P7_USER_ROLE是否将多个值作为逗号分隔文本保存。 “未找到数据”表示系统中未找到该用户名或角色不匹配。这就是为什么,我会调试我的页面项值,看看是否真的是我所期望的。

© www.soinside.com 2019 - 2024. All rights reserved.