73 lines
2.2 KiB
MySQL
73 lines
2.2 KiB
MySQL
|
--liquibase formatted sql
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
--changeset rbac-generators-RELATED-OBJECT:1 endDelimiter:--//
|
||
|
-- ----------------------------------------------------------------------------
|
||
|
|
||
|
create or replace procedure generateRelatedRbacObject(targetTable varchar)
|
||
|
language plpgsql as $$
|
||
|
declare
|
||
|
createInsertTriggerSQL text;
|
||
|
createDeleteTriggerSQL text;
|
||
|
begin
|
||
|
createInsertTriggerSQL = format($sql$
|
||
|
create trigger createRbacObjectFor_%s_Trigger
|
||
|
before insert
|
||
|
on %s
|
||
|
for each row
|
||
|
execute procedure insertRelatedRbacObject();
|
||
|
$sql$, targetTable, targetTable);
|
||
|
execute createInsertTriggerSQL;
|
||
|
|
||
|
createDeleteTriggerSQL = format($sql$
|
||
|
create trigger deleteRbacRulesFor_%s_Trigger
|
||
|
before delete
|
||
|
on %s
|
||
|
for each row
|
||
|
execute procedure deleteRelatedRbacObject();
|
||
|
$sql$, targetTable, targetTable);
|
||
|
execute createDeleteTriggerSQL;
|
||
|
end; $$;
|
||
|
--//
|
||
|
|
||
|
|
||
|
-- ============================================================================
|
||
|
--changeset rbac-generators-ROLE-DESCRIPTORS:1 endDelimiter:--//
|
||
|
-- ----------------------------------------------------------------------------
|
||
|
|
||
|
create or replace procedure generateRbacRoleDescriptors(prefix text, targetTable text)
|
||
|
language plpgsql as $$
|
||
|
declare
|
||
|
sql text;
|
||
|
begin
|
||
|
sql = format($sql$
|
||
|
create or replace function %1$sOwner(entity %2$s)
|
||
|
returns RbacRoleDescriptor
|
||
|
language plpgsql
|
||
|
strict as $f$
|
||
|
begin
|
||
|
return roleDescriptor('%2$s', entity.uuid, 'owner');
|
||
|
end; $f$;
|
||
|
|
||
|
create or replace function %1$sAdmin(entity %2$s)
|
||
|
returns RbacRoleDescriptor
|
||
|
language plpgsql
|
||
|
strict as $f$
|
||
|
begin
|
||
|
return roleDescriptor('%2$s', entity.uuid, 'admin');
|
||
|
end; $f$;
|
||
|
|
||
|
create or replace function %1$sTenant(entity %2$s)
|
||
|
returns RbacRoleDescriptor
|
||
|
language plpgsql
|
||
|
strict as $f$
|
||
|
begin
|
||
|
return roleDescriptor('%2$s', entity.uuid, 'tenant');
|
||
|
end; $f$;
|
||
|
|
||
|
$sql$, prefix, targetTable);
|
||
|
execute sql;
|
||
|
end; $$;
|
||
|
--//
|