-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Only show "Team Settings" menu for users with teamEditor
role
#2693
Changes from 4 commits
deab12d
f405966
b0726e7
f5f9542
e74a7be
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,14 @@ | ||
import gql from "graphql-tag"; | ||
import { publicClient } from "lib/graphql"; | ||
import { compose, mount, redirect, route, withData } from "navi"; | ||
import { | ||
compose, | ||
map, | ||
mount, | ||
NotFoundError, | ||
redirect, | ||
route, | ||
withData, | ||
} from "navi"; | ||
import DataManagerSettings from "pages/FlowEditor/components/Settings/DataManagerSettings"; | ||
import ServiceFlags from "pages/FlowEditor/components/Settings/ServiceFlags"; | ||
import ServiceSettings from "pages/FlowEditor/components/Settings/ServiceSettings"; | ||
|
@@ -18,58 +26,66 @@ const flowSettingsRoutes = compose( | |
|
||
mount({ | ||
"/": redirect("./service"), | ||
"/:tab": route(async (req) => { | ||
const { data } = await publicClient.query({ | ||
query: gql` | ||
query GetFlow($slug: String!, $team_slug: String!) { | ||
flows( | ||
limit: 1 | ||
where: { | ||
slug: { _eq: $slug } | ||
team: { slug: { _eq: $team_slug } } | ||
"/:tab": map(async (req) => { | ||
const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); | ||
if (!isAuthorised) | ||
throw new NotFoundError( | ||
`User does not have access to ${req.originalUrl}`, | ||
); | ||
Comment on lines
+30
to
+34
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I noticed that this was missing and picked up the fix here. On staging and prod you can navigate to |
||
|
||
return route(async (req) => { | ||
const { data } = await publicClient.query({ | ||
query: gql` | ||
query GetFlow($slug: String!, $team_slug: String!) { | ||
flows( | ||
limit: 1 | ||
where: { | ||
slug: { _eq: $slug } | ||
team: { slug: { _eq: $team_slug } } | ||
} | ||
) { | ||
id | ||
settings | ||
} | ||
) { | ||
id | ||
settings | ||
} | ||
} | ||
`, | ||
variables: { | ||
slug: req.params.flow, | ||
team_slug: req.params.team, | ||
}, | ||
}); | ||
`, | ||
variables: { | ||
slug: req.params.flow, | ||
team_slug: req.params.team, | ||
}, | ||
}); | ||
|
||
const settings: FlowSettings = data.flows[0].settings; | ||
useStore.getState().setFlowSettings(settings); | ||
const settings: FlowSettings = data.flows[0].settings; | ||
useStore.getState().setFlowSettings(settings); | ||
|
||
return { | ||
title: makeTitle( | ||
[req.params.team, req.params.flow, "Flow Settings"].join("/"), | ||
), | ||
view: ( | ||
<Settings | ||
currentTab={req.params.tab} | ||
tabs={[ | ||
{ | ||
name: "Service", | ||
route: "service", | ||
Component: ServiceSettings, | ||
}, | ||
{ | ||
name: "Service Flags", | ||
route: "flags", | ||
Component: ServiceFlags, | ||
}, | ||
{ | ||
name: "Data", | ||
route: "data-manager", | ||
Component: DataManagerSettings, | ||
}, | ||
]} | ||
/> | ||
), | ||
}; | ||
return { | ||
title: makeTitle( | ||
[req.params.team, req.params.flow, "Flow Settings"].join("/"), | ||
), | ||
view: ( | ||
<Settings | ||
currentTab={req.params.tab} | ||
tabs={[ | ||
{ | ||
name: "Service", | ||
route: "service", | ||
Component: ServiceSettings, | ||
}, | ||
{ | ||
name: "Service Flags", | ||
route: "flags", | ||
Component: ServiceFlags, | ||
}, | ||
{ | ||
name: "Data", | ||
route: "data-manager", | ||
Component: DataManagerSettings, | ||
}, | ||
]} | ||
/> | ||
), | ||
}; | ||
}); | ||
}), | ||
}), | ||
); | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,39 +1,56 @@ | ||
import { compose, mount, redirect, route, withData } from "navi"; | ||
import { | ||
compose, | ||
map, | ||
mount, | ||
NotFoundError, | ||
redirect, | ||
route, | ||
withData, | ||
} from "navi"; | ||
import DesignSettings from "pages/FlowEditor/components/Settings/DesignSettings"; | ||
import TeamSettings from "pages/FlowEditor/components/Settings/TeamSettings"; | ||
import { useStore } from "pages/FlowEditor/lib/store"; | ||
import React from "react"; | ||
|
||
import Settings from "../pages/FlowEditor/components/Settings"; | ||
import { makeTitle } from "./utils"; | ||
|
||
const flowSettingsRoutes = compose( | ||
const teamSettingsRoutes = compose( | ||
withData((req) => ({ | ||
mountpath: req.mountpath, | ||
})), | ||
|
||
mount({ | ||
"/": redirect("./team"), | ||
"/:tab": route(async (req) => ({ | ||
title: makeTitle([req.params.team, "Team Settings"].join("/")), | ||
view: ( | ||
<Settings | ||
currentTab={req.params.tab} | ||
tabs={[ | ||
{ | ||
name: "Team", | ||
route: "team", | ||
Component: TeamSettings, | ||
}, | ||
{ | ||
name: "Design", | ||
route: "design", | ||
Component: DesignSettings, | ||
}, | ||
]} | ||
/> | ||
), | ||
})), | ||
"/:tab": map(async (req) => { | ||
const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); | ||
if (!isAuthorised) | ||
throw new NotFoundError( | ||
`User does not have access to ${req.originalUrl}`, | ||
); | ||
|
||
return route(async (req) => ({ | ||
title: makeTitle([req.params.team, "Team Settings"].join("/")), | ||
view: ( | ||
<Settings | ||
currentTab={req.params.tab} | ||
tabs={[ | ||
{ | ||
name: "Team", | ||
route: "team", | ||
Component: TeamSettings, | ||
}, | ||
{ | ||
name: "Design", | ||
route: "design", | ||
Component: DesignSettings, | ||
}, | ||
]} | ||
/> | ||
), | ||
})); | ||
}), | ||
}), | ||
); | ||
|
||
export default flowSettingsRoutes; | ||
export default teamSettingsRoutes; |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1412,6 +1412,10 @@ | |
- table: | ||
name: team_themes | ||
schema: public | ||
object_relationships: | ||
- name: team | ||
using: | ||
foreign_key_constraint_on: team_id | ||
select_permissions: | ||
- role: api | ||
permission: | ||
|
@@ -1481,7 +1485,14 @@ | |
- link_colour | ||
- logo | ||
- primary_colour | ||
filter: {} | ||
filter: | ||
team: | ||
members: | ||
_and: | ||
- user_id: | ||
_eq: x-hasura-user-id | ||
- role: | ||
_eq: teamEditor | ||
Comment on lines
+1488
to
+1495
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This equates to "teams where the user is a teamEditor" |
||
check: null | ||
comment: "" | ||
- table: | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few related fixes / tidy ups to the change made in this PR , apologies for polluting things a little.