-- 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;