Skip to content

Commit

Permalink
Merge pull request #1562 from guardian/db/show-user-list-or-msg-based…
Browse files Browse the repository at this point in the history
…-on-permissions

Show users editions list or message based on permissions
  • Loading branch information
Divs-B authored Apr 23, 2024
2 parents 72f4d11 + 6607098 commit 3acfc6b
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 10 deletions.
1 change: 1 addition & 0 deletions app/conf/Configuration.scala
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ class ApplicationConfiguration(val playConfiguration: PlayConfiguration, val isP

object faciatool {
lazy val breakingNewsFront = "breaking-news"
lazy val canEditEditions = "edit-editions"
lazy val frontPressToolTopic = getString("faciatool.sns.tool_topic_arn")
lazy val publishEventsQueue = getMandatoryString("publish_events.queue_url")
lazy val showTestContainers = getBoolean("faciatool.show_test_containers").getOrElse(false)
Expand Down
2 changes: 2 additions & 0 deletions app/controllers/DefaultsController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,11 @@ class DefaultsController(val acl: Acl, val isDev: Boolean, val deps: BaseFaciaCo
def configuration = AccessAPIAuthAction { implicit request =>
val hasBreakingNews = acl.testUser(Permissions.BreakingNewsAlert, "facia-tool-allow-breaking-news-for-all")(request.user.email)
val hasConfigureFronts = acl.testUser(Permissions.ConfigureFronts, "facia-tool-allow-config-for-all")(request.user.email)
val hasEditionsPermissions = acl.testUser(Permissions.EditEditions, "facia-tool-allow-edit-editorial-fronts-for-all")(request.user.email)

val acls = AclJson(
fronts = Map(config.faciatool.breakingNewsFront -> hasBreakingNews),
editions = Map(config.faciatool.canEditEditions -> hasEditionsPermissions),
permissions = Map("configure-config" -> hasConfigureFronts)
)

Expand Down
2 changes: 2 additions & 0 deletions app/controllers/V2App.scala
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,11 @@ class V2App(isDev: Boolean, val acl: Acl, dynamoClient: DynamoDbClient, val deps

val hasBreakingNews = acl.testUser(Permissions.BreakingNewsAlert, "facia-tool-allow-breaking-news-for-all")(req.user.email)
val hasConfigureFronts = acl.testUser(Permissions.ConfigureFronts, "facia-tool-allow-config-for-all")(req.user.email)
val hasEditionsPermissions = acl.testUser(Permissions.EditEditions, "facia-tool-allow-edit-editions-for-all")(req.user.email)

val acls = AclJson(
fronts = Map(config.faciatool.breakingNewsFront -> hasBreakingNews),
editions = Map(config.faciatool.canEditEditions -> hasEditionsPermissions),
permissions = Map("configure-config" -> hasConfigureFronts)
)

Expand Down
1 change: 1 addition & 0 deletions app/util/Acl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ object AclJson {

case class AclJson (
fronts: Map[String, Authorization],
editions: Map[String, Authorization],
permissions: Map[String, Authorization]
)

Expand Down
34 changes: 24 additions & 10 deletions fronts-client/src/components/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import { Link } from 'react-router-dom';
import { priorities } from 'constants/priorities';
import { EditionPriority } from 'types/Priority';
import HomeContainer from './layout/HomeContainer';
import { selectAvailableEditions } from 'selectors/configSelectors';
import {
selectAvailableEditions,
selectEditionsPermission,
} from 'selectors/configSelectors';
import type { State } from 'types/State';

const renderPriority = (priority: string) => (
Expand All @@ -23,21 +26,21 @@ const renderEditionPriority = (editionPriority: EditionPriority) => (

type IProps = ReturnType<typeof mapStateToProps>;

const Home = ({ availableEditions }: IProps) => (
const Home = ({ availableEditions, editEditionsIsPermitted }: IProps) => (
<HomeContainer>
<h3>Front priorities</h3>
<ul>{Object.keys(priorities).map(renderPriority)}</ul>

<h3>Manage editions</h3>
<ul>
{availableEditions &&
availableEditions
.sort((a, b) =>
a.editionType === b.editionType ? (a.title < b.title ? 0 : 1) : 1
)
.map(renderEditionPriority)}
{!editEditionsIsPermitted
? displayNoPermissionMessage('Editions')
: availableEditions &&
availableEditions
.sort((a, b) =>
a.editionType === b.editionType ? (a.title < b.title ? 0 : 1) : 1
)
.map(renderEditionPriority)}
</ul>

<h3>Manage edition list</h3>
<ul>
<li>
Expand All @@ -52,6 +55,17 @@ const Home = ({ availableEditions }: IProps) => (

const mapStateToProps = (state: State) => ({
availableEditions: selectAvailableEditions(state),
editEditionsIsPermitted: selectEditionsPermission(state)?.['edit-editions'],
});

const displayNoPermissionMessage = (onContent: string) => {
return (
<p>
You do not have permission to edit {onContent}. Please contact{' '}
<a href="mailto:central.production@guardian.co.uk">Central Production</a>{' '}
to request access.
</p>
);
};

export default connect(mapStateToProps)(Home);
1 change: 1 addition & 0 deletions fronts-client/src/fixtures/initialState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ const config: Config = {
},
acl: {
fronts: { 'breaking-news': true },
editions: { 'edit-editions': true },
permissions: { 'configure-config': true },
},
collectionCap: 20,
Expand Down
6 changes: 6 additions & 0 deletions fronts-client/src/selectors/configSelectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ const selectShouldUsePreviewCODE = createSelector(
(config) => !config || config.env === 'code'
);

const selectEditionsPermission = createSelector(
selectConfig,
(config) => config && config.acl.editions
);

export {
selectCapiLiveURL,
selectCapiPreviewURL,
Expand All @@ -59,4 +64,5 @@ export {
selectGridUrl,
selectAvailableEditions,
selectShouldUsePreviewCODE,
selectEditionsPermission,
};
1 change: 1 addition & 0 deletions fronts-client/src/types/Config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ interface Permission {

interface Acl {
fronts: Permission;
editions: Permission;
permissions: Permission;
}

Expand Down

0 comments on commit 3acfc6b

Please sign in to comment.