T-HUB/apps/api/migrations/002_rbac_seed.sql
glass beadian aa5e262f3a Tactical Media Broadcast Hub — initial release
Self-hosted multi-platform broadcast newsroom for activist collectives:
publishing pipeline with group approval and DST-proof scheduling, TweetDeck-style
column wall with hostile-content-safe rendering, live control room with Auto
Director, bridged chat governance with polls and quorum, distributed sandboxed
transcode workers, encrypted content-addressed archive, monthly analytics.

MIT licensed. See README.md and docs/.
2026-10-10 11:56:42 +00:00

90 lines
3.6 KiB
PL/PgSQL

-- 002: RBAC seed — 37 permissions across 10 roles
-- publication.delete is a legacy seed (including Publisher). Deprecated for moderation;
-- future hide/delete routes must use dedicated moderation permissions from 011.
BEGIN;
INSERT INTO role_permissions (role, permission)
SELECT 'Owner', p FROM unnest(ARRAY[
'workspace.view','workspace.settings','workspace.members.manage',
'connection.view','connection.manage','credential.manage',
'draft.view','draft.create','draft.edit','approval.request','approval.grant',
'publication.publish','publication.schedule','publication.delete',
'media.view','media.manage','inbox.view','inbox.reply','stream.view',
'analytics.view','audit.view',
'virtualchannel.view','virtualchannel.create','virtualchannel.edit',
'director.view','director.take','director.override_auto','director.change_layout','director.lock_program',
'streamsource.manage','streamoutput.manage',
'livestream.view','livestream.manage',
'livechat.view','livechat.send','livechat.moderate'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'Admin', p FROM unnest(ARRAY[
'workspace.view','workspace.settings','workspace.members.manage',
'connection.view','connection.manage','credential.manage',
'draft.view','draft.create','draft.edit','approval.request','approval.grant',
'publication.publish','publication.schedule','publication.delete',
'media.view','media.manage','inbox.view','inbox.reply','stream.view',
'analytics.view','audit.view',
'virtualchannel.view','director.view','livestream.view','livechat.view'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'Publisher', p FROM unnest(ARRAY[
'workspace.view','connection.view','draft.view','draft.create','draft.edit',
'approval.request','publication.publish','publication.schedule','publication.delete',
'media.view','media.manage','inbox.view','inbox.reply','stream.view','analytics.view'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'Editor', p FROM unnest(ARRAY[
'workspace.view','connection.view','draft.view','draft.create','draft.edit',
'media.view','media.manage','inbox.view','inbox.reply','stream.view'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'Approver', p FROM unnest(ARRAY[
'workspace.view','draft.view','approval.grant','analytics.view','audit.view'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'Analyst', p FROM unnest(ARRAY[
'workspace.view','analytics.view','stream.view','audit.view'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'Moderator', p FROM unnest(ARRAY[
'workspace.view','inbox.view','inbox.reply',
'livechat.view','livechat.send','livechat.moderate'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'VideoPublisher', p FROM unnest(ARRAY[
'workspace.view','draft.view','draft.create','draft.edit',
'publication.publish','publication.schedule','media.view','media.manage'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'StreamOperator', p FROM unnest(ARRAY[
'workspace.view','livestream.view','livestream.manage','stream.view'
]) AS p
ON CONFLICT DO NOTHING;
INSERT INTO role_permissions (role, permission)
SELECT 'BroadcastOperator', p FROM unnest(ARRAY[
'workspace.view','virtualchannel.view',
'director.view','director.take','director.override_auto','director.change_layout','director.lock_program',
'streamsource.manage','livestream.view',
'livechat.view','livechat.send','livechat.moderate'
]) AS p
ON CONFLICT DO NOTHING;
COMMIT;