2.5 IS_ROLE_REMOVED_FROM_USERファンクション

このファンクションは、ロールがユーザーから削除されているかどうかを確認します。ユーザーの新しいロールIDのリストから特定のロールが削除されている場合、このファンクションはTRUEを返します。

このファンクションは、ユーザーがp_role_static_idで識別されるロールを自分自身から削除できないようにするために使用されます。

構文

APEX_ACL.IS_ROLE_REMOVED_FROM_USER (
    p_application_id    IN NUMBER   DEFAULT apex_application.g_flow_id,
    p_user_name         IN VARCHAR2,
    p_role_static_id    IN VARCHAR2,
    p_role_ids          IN apex_t_number )
RETURN BOOLEAN;

パラメータ

パラメータ 説明
p_application_id ユーザーのロール・リストから特定のロールが削除されているかどうかを確認するためのアプリケーションID。デフォルトは、現在のアプリケーションです。
p_user_name 確認するアプリケーション・ユーザーの大/小文字を区別しない名前。
p_role_static_id 削除されているかどうかを確認するロールの静的IDの名前(大/小文字の区別なし)。
p_role_ids ユーザーに割り当てられているNUMBER型の新しいロールIDの配列。

戻り値

p_user_nameが現在p_role_static_idで識別されるロールを持っているが、p_role_idsで識別されるロールにp_role_static_idで識別されるロールが含まれていない場合、TRUEを戻します。

その他の場合はすべてFALSEを戻します。

次の例では、IS_ROLE_REMOVED_FROM_USERファンクションを使用して、ADMINISTRATORロールを持つアプリケーションの現在のユーザーが、アプリケーションへのアクセスを更新または削除する際にロールから自分自身を削除しないようにします。

BEGIN
    IF :P1_USER_NAME = :APP_USER
       and apex_acl.is_role_removed_from_user (
                p_application_id => :APP_ID,
                p_user_name      => :APP_USER,
                p_role_static_id => 'ADMINISTRATOR',
                p_role_ids       => apex_string.split_numbers(
                                        p_str => case when :REQUEST = 'DELETE' THEN
                                                     null
                                                 ELSE
                                                     :P1_ROLE_IDS
                                                 END,
                                        p_sep => ':') ) THEN

        raise_application_error(-20001, 'You cannot remove administrator role from yourself.' );
    END IF;
END;