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/.
This commit is contained in:
commit
aa5e262f3a
880 changed files with 111042 additions and 0 deletions
90
apps/api/migrations/002_rbac_seed.sql
Normal file
90
apps/api/migrations/002_rbac_seed.sql
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
-- 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;
|
||||
Loading…
Add table
Add a link
Reference in a new issue