Skip to content

Commit 302c3aa

Browse files
committed
feat(Permissions): Use <object>.permissions instead of authorizedActions
1 parent d57252a commit 302c3aa

29 files changed

Lines changed: 1414 additions & 504 deletions

schema.graphql

Lines changed: 514 additions & 43 deletions
Large diffs are not rendered by default.

src/components/layouts/Layout/Header.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ const Header = () => {
4545
</div>
4646
<div className="hidden md:block">
4747
<div className="ml-4 flex items-center md:ml-6">
48-
{data?.me.authorizedActions.includes(
49-
MeAuthorizedActions.CreateAccessmodProject
50-
) && (
48+
{data?.me.permissions.createAccessmodProject && (
5149
<Toggle>
5250
{({ isToggled, toggle }) => (
5351
<>
@@ -83,7 +81,9 @@ Header.prefetch = async (client: CustomApolloClient) => {
8381
query: gql`
8482
query Header {
8583
me {
86-
authorizedActions
84+
permissions {
85+
createAccessmodProject
86+
}
8787
...UserMenu_me
8888
}
8989
...Navbar_navbar

src/components/layouts/Layout/UserMenu.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ const UserMenu = (props: UserMenuProps) => {
5252
</MenuLink>
5353
)}
5454
</Menu.Item>
55-
{me.authorizedActions.includes(
56-
MeAuthorizedActions.ManageAccessmodAccessRequests
57-
) && (
55+
{me.permissions.manageAccessmodAccessRequests && (
5856
<Menu.Item>
5957
{({ active }) => (
6058
<MenuLink
@@ -92,7 +90,9 @@ const UserMenu = (props: UserMenuProps) => {
9290
UserMenu.fragments = {
9391
me: gql`
9492
fragment UserMenu_me on Me {
95-
authorizedActions
93+
permissions {
94+
manageAccessmodAccessRequests
95+
}
9696
user {
9797
avatar {
9898
initials

src/features/CreateAnalysisTrigger.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ type Props = {
1313
const CreateAnalysisTrigger = ({ project, children }: Props) => {
1414
const [isOpen, { toggle }] = useToggle();
1515

16-
if (
17-
!project.authorizedActions.includes(
18-
AccessmodProjectAuthorizedActions.CreateAnalysis
19-
)
20-
) {
16+
if (!project.permissions.createAnalysis) {
2117
return null;
2218
}
2319
return (
@@ -32,7 +28,9 @@ CreateAnalysisTrigger.fragments = {
3228
project: gql`
3329
fragment CreateAnalysisTrigger_project on AccessmodProject {
3430
...CreateAnalysisDialog_project
35-
authorizedActions
31+
permissions {
32+
createAnalysis
33+
}
3634
}
3735
${CreateAnalysisDialog.fragments.project}
3836
`,

src/features/InviteTeamMemberTrigger.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ type Props = {
1212
const InviteTeamMemberTrigger = ({ team, children }: Props) => {
1313
const [isOpen, { toggle }] = useToggle();
1414

15-
if (
16-
!team.authorizedActions.includes(TeamAuthorizedActions.CreateMembership)
17-
) {
15+
if (!team.permissions.createMembership) {
1816
return null;
1917
}
2018
return (
@@ -29,7 +27,9 @@ InviteTeamMemberTrigger.fragments = {
2927
team: gql`
3028
fragment InviteTeamMemberTrigger_team on Team {
3129
...InviteTeamMemberDialog_team
32-
authorizedActions
30+
permissions {
31+
createMembership
32+
}
3333
}
3434
3535
${InviteTeamMemberDialog.fragments.team}

src/features/TeamMembersTable.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,6 @@ const TeamMembersTable = ({ team }: Props) => {
5555
}
5656

5757
const { memberships } = data.team;
58-
const canUpdateMember = (member: Pick<Membership, "authorizedActions">) =>
59-
member.authorizedActions.includes(MembershipAuthorizedActions.Update);
60-
6158
const onMemberRoleChange = async (
6259
member: Pick<Membership, "id">,
6360
role: MembershipRole
@@ -88,7 +85,7 @@ const TeamMembersTable = ({ team }: Props) => {
8885
<Time datetime={member.createdAt} />
8986
</td>
9087
<td>
91-
{canUpdateMember(member) ? (
88+
{member.permissions.update ? (
9289
<MembershipRolePicker
9390
onChange={(role) => onMemberRoleChange(member, role)}
9491
value={member.role}
@@ -100,9 +97,7 @@ const TeamMembersTable = ({ team }: Props) => {
10097
</td>
10198
<td>
10299
<div className="flex justify-end gap-3">
103-
{member.authorizedActions.includes(
104-
MembershipAuthorizedActions.Delete
105-
) && (
100+
{member.permissions.delete && (
106101
<DeleteMembershipTrigger membership={member}>
107102
{({ onClick }) => (
108103
<button
@@ -155,7 +150,10 @@ TeamMembersTable.prefetch = async (
155150
items {
156151
...DeleteMembershipTrigger_membership
157152
id
158-
authorizedActions
153+
permissions {
154+
update
155+
delete
156+
}
159157
createdAt
160158
updatedAt
161159
role

src/features/analysis/AnalysisActionsButton.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ const AnalysisActionsButton = ({ project, analysis }: Props) => {
4747
return (
4848
<div className="flex items-center gap-2">
4949
{analysis.status === AccessmodAnalysisStatus.Ready &&
50-
analysis.authorizedActions.includes(
51-
AccessmodAnalysisAuthorizedActions.Run
52-
) && (
50+
analysis.permissions.run && (
5351
<Button onClick={onRun} variant="primary">
5452
{t("Run")}
5553
</Button>
@@ -60,9 +58,7 @@ const AnalysisActionsButton = ({ project, analysis }: Props) => {
6058
AccessmodAnalysisStatus.Ready,
6159
AccessmodAnalysisStatus.Draft,
6260
].includes(analysis.status) &&
63-
analysis.authorizedActions.includes(
64-
AccessmodAnalysisAuthorizedActions.Update
65-
) && (
61+
analysis.permissions.update && (
6662
<Menu.Item>
6763
<Link
6864
href={{
@@ -81,9 +77,7 @@ const AnalysisActionsButton = ({ project, analysis }: Props) => {
8177
AccessmodAnalysisStatus.Running,
8278
AccessmodAnalysisStatus.Queued,
8379
].includes(analysis.status) &&
84-
analysis.authorizedActions.includes(
85-
AccessmodAnalysisAuthorizedActions.Delete
86-
) && (
80+
analysis.permissions.delete && (
8781
<Menu.Item
8882
onClick={onDeleteClick}
8983
activeClassName="bg-red-500 text-white"
@@ -109,7 +103,11 @@ AnalysisActionsButton.fragments = {
109103
name
110104
status
111105
type
112-
authorizedActions
106+
permissions {
107+
update
108+
delete
109+
run
110+
}
113111
}
114112
`,
115113
};

src/features/dataset/CreateDatasetTrigger.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ type Props = {
1212
const CreateDatasetTrigger = ({ project, children }: Props) => {
1313
const [isOpen, { toggle }] = useToggle();
1414

15-
if (
16-
!project.authorizedActions.includes(
17-
AccessmodProjectAuthorizedActions.CreateFileset
18-
)
19-
) {
15+
if (!project.permissions.createFileset) {
2016
return null;
2117
}
2218
return (
@@ -31,7 +27,9 @@ CreateDatasetTrigger.fragments = {
3127
project: gql`
3228
fragment CreateDatasetTrigger_project on AccessmodProject {
3329
...DatasetFormDialog_project
34-
authorizedActions
30+
permissions {
31+
createFileset
32+
}
3533
}
3634
${DatasetFormDialog.fragments.project}
3735
`,

src/features/dataset/DatasetActionsMenu.tsx

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,28 @@ const DatasetActionsMenu = (props: DatasetActionsMenuProps) => {
2525
return (
2626
<div className="flex gap-2">
2727
<DownloadDatasetButton variant="primary" dataset={dataset} />
28-
{dataset.authorizedActions.some((x) =>
29-
[
30-
AccessmodFilesetAuthorizedActions.Delete,
31-
AccessmodFilesetAuthorizedActions.Update,
32-
].includes(x)
33-
) && (
34-
<Menu label={t("Actions")}>
35-
{dataset.authorizedActions.includes(
36-
AccessmodFilesetAuthorizedActions.Update
37-
) && (
38-
<Menu.Item onClick={() => setEditing(true)}>
39-
<PencilIcon className="mr-2 h-4 w-4" />
40-
{t("Edit")}
41-
</Menu.Item>
42-
)}
43-
<DeleteDatasetTrigger dataset={dataset} project={project}>
44-
{({ onClick }) => (
45-
<Menu.Item
46-
activeClassName="bg-red-500 text-white"
47-
onClick={onClick}
48-
>
49-
<TrashIcon className="mr-2 h-4 w-4" />
50-
{t("Delete")}
28+
{dataset.permissions.delete ||
29+
(dataset.permissions.update && (
30+
<Menu label={t("Actions")}>
31+
{dataset.permissions.update && (
32+
<Menu.Item onClick={() => setEditing(true)}>
33+
<PencilIcon className="mr-2 h-4 w-4" />
34+
{t("Edit")}
5135
</Menu.Item>
5236
)}
53-
</DeleteDatasetTrigger>
54-
</Menu>
55-
)}
37+
<DeleteDatasetTrigger dataset={dataset} project={project}>
38+
{({ onClick }) => (
39+
<Menu.Item
40+
activeClassName="bg-red-500 text-white"
41+
onClick={onClick}
42+
>
43+
<TrashIcon className="mr-2 h-4 w-4" />
44+
{t("Delete")}
45+
</Menu.Item>
46+
)}
47+
</DeleteDatasetTrigger>
48+
</Menu>
49+
))}
5650
<DatasetDialog
5751
dataset={dataset}
5852
onClose={() => setEditing(false)}
@@ -68,7 +62,10 @@ DatasetActionsMenu.fragments = {
6862
id
6963
status
7064
metadata
71-
authorizedActions
65+
permissions {
66+
update
67+
delete
68+
}
7269
...DatasetDialog_dataset
7370
...DownloadDatasetButton_dataset
7471
...DeleteDatasetTrigger_dataset

src/features/dataset/DatasetDialog/DatasetDialog.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ DatasetDialog.fragments = {
175175
...DatasetStatusBadge_dataset
176176
mode
177177
status
178-
authorizedActions
179178
}
180179
${DatasetStatusBadge.fragments.dataset}
181180
`,

0 commit comments

Comments
 (0)