{
- {(signedIn || (localLiveFeedAccess === 'public' && remoteLiveFeedAccess === 'public')) && (
+ {(canViewFeed(signedIn, permissions, localLiveFeedAccess) && canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
@@ -213,7 +223,7 @@ const Firehose = ({ feedType, multiColumn }) => {
onLoadMore={handleLoadMore}
trackScroll
scrollKey='firehose'
- emptyMessage={emptyMessage}
+ emptyMessage={canViewSelectedFeed ? emptyMessage : disabledTimelineMessage}
bindToDocument={!multiColumn}
regex={regex}
/>
diff --git a/app/javascript/flavours/glitch/features/navigation_panel/index.tsx b/app/javascript/flavours/glitch/features/navigation_panel/index.tsx
index 65f021d82c..17f95bd628 100644
--- a/app/javascript/flavours/glitch/features/navigation_panel/index.tsx
+++ b/app/javascript/flavours/glitch/features/navigation_panel/index.tsx
@@ -47,6 +47,7 @@ import {
me,
} from 'flavours/glitch/initial_state';
import { transientSingleColumn } from 'flavours/glitch/is_mobile';
+import { canViewFeed } from 'flavours/glitch/permissions';
import { selectUnreadNotificationGroupsCount } from 'flavours/glitch/selectors/notifications';
import { useAppSelector, useAppDispatch } from 'flavours/glitch/store';
@@ -208,7 +209,7 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
multiColumn = false,
}) => {
const intl = useIntl();
- const { signedIn, disabledAccountId } = useIdentity();
+ const { signedIn, permissions, disabledAccountId } = useIdentity();
const location = useLocation();
const showSearch = useBreakpoint('full') && !multiColumn;
const dispatch = useAppDispatch();
@@ -286,13 +287,12 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
/>
)}
- {(signedIn ||
- localLiveFeedAccess === 'public' ||
- remoteLiveFeedAccess === 'public') && (
+ {(canViewFeed(signedIn, permissions, localLiveFeedAccess) ||
+ canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
+ ) : (
+
+ );
+
return (
}
+ emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
regex={this.props.regex}
/>
diff --git a/app/javascript/flavours/glitch/initial_state.ts b/app/javascript/flavours/glitch/initial_state.ts
index 359f0f6c01..bf9926c543 100644
--- a/app/javascript/flavours/glitch/initial_state.ts
+++ b/app/javascript/flavours/glitch/initial_state.ts
@@ -35,10 +35,10 @@ interface InitialStateMeta {
single_user_mode: boolean;
source_url: string;
streaming_api_base_url: string;
- local_live_feed_access: 'public' | 'authenticated';
- remote_live_feed_access: 'public' | 'authenticated';
- local_topic_feed_access: 'public' | 'authenticated';
- remote_topic_feed_access: 'public' | 'authenticated';
+ local_live_feed_access: 'public' | 'authenticated' | 'disabled';
+ remote_live_feed_access: 'public' | 'authenticated' | 'disabled';
+ local_topic_feed_access: 'public' | 'authenticated' | 'disabled';
+ remote_topic_feed_access: 'public' | 'authenticated' | 'disabled';
title: string;
show_trends: boolean;
trends_as_landing_page: boolean;
diff --git a/app/javascript/flavours/glitch/permissions.ts b/app/javascript/flavours/glitch/permissions.ts
index d7695d2f5c..a83e1d77a7 100644
--- a/app/javascript/flavours/glitch/permissions.ts
+++ b/app/javascript/flavours/glitch/permissions.ts
@@ -1,3 +1,4 @@
+export const PEMRISSION_VIEW_FEEDS = 0x0000000000100000;
export const PERMISSION_INVITE_USERS = 0x0000000000010000;
export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
export const PERMISSION_MANAGE_TAXONOMIES = 0x0000000000000100;
@@ -22,3 +23,19 @@ export function canManageReports(permissions: number) {
(permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS
);
}
+
+export const canViewFeed = (
+ signedIn: boolean,
+ permissions: number,
+ setting: 'public' | 'authenticated' | 'disabled' | undefined,
+) => {
+ switch (setting) {
+ case 'public':
+ return true;
+ case 'authenticated':
+ return signedIn;
+ case 'disabled':
+ default:
+ return (permissions & PEMRISSION_VIEW_FEEDS) === PEMRISSION_VIEW_FEEDS;
+ }
+};