保存用户角色分配

时间:2020-08-27 08:43:25

标签: oracle-apex

是否可以保存用户角色分配?当我替换应用程序或将其删除并使用相同的应用程序ID添加新应用程序时,Apex会从APEX_APPL_ACL_USERS表中删除用户角色分配。实际上,我可以创建自定义表来存储用户角色定义,以后再用于在APEX_APPL_ACL_USERS表中插入,但是我认为这不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

目前没有。最安全的方法是在替换应用程序之前备份用户角色。我发现,当我通过UI进行导入时,将保留用户,而当您删除应用程序时,用户将消失。关于如何生成脚本以还原用户角色的blog很棒。 对于单个应用程序,这是一个脚本(大部分取自以上博客)。将12345替换为您的应用程序ID。重新生成应用程序后,它会生成一个脚本,您必须执行该脚本。

WITH application_id (app_id) AS
(SELECT 12345 FROM dual)
SELECT txt
   FROM (SELECT 1 x, 'BEGIN' txt FROM DUAL
         UNION ALL
         SELECT 2,
                   RPAD(' ', 3)
                || CASE
                       WHEN rn = 1 THEN REPLACE(q'[APEX_UTIL.set_workspace('~workspace~');]', '~workspace~', workspace)
                   END
                || REPLACE(
                       REPLACE(
                           REPLACE(
                               q'[APEX_ACL.ADD_USER_ROLE(p_application_id=>~app~,p_user_name=>'~user~',p_role_static_id=>'~role~');]',
                               '~app~',
                               application_id),
                           '~user~',
                           user_name),
                       '~role~',
                       role_static_id) txt
           FROM (SELECT workspace,
                        ROW_NUMBER() OVER(PARTITION BY workspace ORDER BY application_id, user_name, role_static_id) rn,
                        application_id,
                        user_name,
                        role_static_id
                   FROM apex_appl_acl_user_roles 
                        JOIN application_id a ON a.app_id = application_id)
         UNION ALL
         SELECT 3, '   COMMIT;' FROM DUAL
         UNION ALL
         SELECT 4, 'END;' FROM DUAL)
  ORDER BY x;