Skip to content

Commit 24391ab

Browse files
authored
refactor: remove usage of scopes for target access tokens (#6330)
1 parent 7d3291f commit 24391ab

File tree

5 files changed

+12
-234
lines changed

5 files changed

+12
-234
lines changed

packages/services/api/src/modules/schema/providers/schema-version-helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ export class SchemaVersionHelper {
330330
return schemaLog?.sdl ?? null;
331331
}
332332

333-
async getIsValid(schemaVersion: SchemaVersion) {
333+
getIsValid(schemaVersion: SchemaVersion) {
334334
return schemaVersion.isComposable && schemaVersion.hasContractCompositionErrors === false;
335335
}
336336

packages/web/app/src/components/target/settings/registry-access-token.tsx

Lines changed: 11 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { useState } from 'react';
22
import { useForm, UseFormReturn } from 'react-hook-form';
3-
import { AnyVariables, useMutation, UseMutationState, useQuery } from 'urql';
3+
import { AnyVariables, useMutation, UseMutationState } from 'urql';
44
import { z } from 'zod';
55
import { Tag } from '@/components//v2/tag';
6-
import { PermissionScopeItem, usePermissionsManager } from '@/components/organization/Permissions';
6+
import { PermissionScopeItem } from '@/components/organization/Permissions';
77
import { Button } from '@/components/ui/button';
88
import {
99
Dialog,
@@ -18,7 +18,7 @@ import { Input } from '@/components/ui/input';
1818
import { InputCopy } from '@/components/ui/input-copy';
1919
import { useToast } from '@/components/ui/use-toast';
2020
import { Accordion } from '@/components/v2/accordion';
21-
import { FragmentType, graphql, useFragment } from '@/gql';
21+
import { graphql } from '@/gql';
2222
import { TargetAccessScope } from '@/gql/graphql';
2323
import { RegistryAccessScope } from '@/lib/access/common';
2424
import { zodResolver } from '@hookform/resolvers/zod';
@@ -48,16 +48,6 @@ export const CreateAccessToken_CreateTokenMutation = graphql(`
4848
}
4949
`);
5050

51-
const CreateAccessTokenModalQuery = graphql(`
52-
query CreateAccessTokenModalQuery($organizationSlug: String!) {
53-
organization(selector: { organizationSlug: $organizationSlug }) {
54-
organization {
55-
...CreateAccessTokenModalContent_OrganizationFragment
56-
}
57-
}
58-
}
59-
`);
60-
6151
export function CreateAccessTokenModal(props: {
6252
isOpen: boolean;
6353
toggleModalOpen: () => void;
@@ -66,52 +56,19 @@ export function CreateAccessTokenModal(props: {
6656
targetSlug: string;
6757
}) {
6858
const { isOpen, toggleModalOpen } = props;
69-
const [organizationQuery] = useQuery({
70-
query: CreateAccessTokenModalQuery,
71-
variables: {
72-
organizationSlug: props.organizationSlug,
73-
},
74-
});
75-
76-
const organization = organizationQuery.data?.organization?.organization;
7759

7860
return (
7961
<Dialog open={isOpen} onOpenChange={toggleModalOpen}>
80-
{organization ? (
81-
<ModalContent
82-
organization={organization}
83-
organizationSlug={props.organizationSlug}
84-
projectSlug={props.projectSlug}
85-
targetSlug={props.targetSlug}
86-
toggleModalOpen={toggleModalOpen}
87-
/>
88-
) : (
89-
<DialogContent className="container w-4/5 max-w-[600px] md:w-3/5">
90-
<DialogHeader>
91-
<DialogTitle>Organization not found</DialogTitle>
92-
<DialogDescription>
93-
The organization you are trying to access does not exist.
94-
</DialogDescription>
95-
</DialogHeader>
96-
<DialogFooter>
97-
<Button onClick={toggleModalOpen}>Ok, got it!</Button>
98-
</DialogFooter>
99-
</DialogContent>
100-
)}
62+
<ModalContent
63+
organizationSlug={props.organizationSlug}
64+
projectSlug={props.projectSlug}
65+
targetSlug={props.targetSlug}
66+
toggleModalOpen={toggleModalOpen}
67+
/>
10168
</Dialog>
10269
);
10370
}
10471

105-
const CreateAccessTokenModalContent_OrganizationFragment = graphql(`
106-
fragment CreateAccessTokenModalContent_OrganizationFragment on Organization {
107-
id
108-
...UsePermissionManager_OrganizationFragment
109-
me {
110-
...UsePermissionManager_MemberFragment
111-
}
112-
}
113-
`);
114-
11572
function getFinalTargetAccessScopes(
11673
selectedScope: 'no-access' | TargetAccessScope,
11774
): Array<TargetAccessScope> {
@@ -142,25 +99,14 @@ const createRegistryTokenFormSchema = z.object({
14299
});
143100

144101
export function ModalContent(props: {
145-
organization: FragmentType<typeof CreateAccessTokenModalContent_OrganizationFragment>;
146102
organizationSlug: string;
147103
projectSlug: string;
148104
targetSlug: string;
149105
toggleModalOpen: () => void;
150106
}) {
151107
const { toast } = useToast();
152-
const organization = useFragment(
153-
CreateAccessTokenModalContent_OrganizationFragment,
154-
props.organization,
155-
);
156108
const [selectedScope, setSelectedScope] = useState<'no-access' | TargetAccessScope>('no-access');
157109

158-
const manager = usePermissionsManager({
159-
organization,
160-
member: organization.me,
161-
passMemberScopes: false,
162-
});
163-
164110
const form = useForm<z.infer<typeof createRegistryTokenFormSchema>>({
165111
mode: 'onChange',
166112
resolver: zodResolver(createRegistryTokenFormSchema),
@@ -205,7 +151,6 @@ export function ModalContent(props: {
205151
return (
206152
<GenerateTokenContent
207153
form={form}
208-
manager={manager}
209154
noPermissionsSelected={noPermissionsSelected}
210155
onSubmit={onSubmit}
211156
selectedScope={selectedScope} // Ensure selectedScope is passed correctly
@@ -246,7 +191,6 @@ export function CreatedTokenContent(props: {
246191
export function GenerateTokenContent(props: {
247192
form: UseFormReturn<z.infer<typeof createRegistryTokenFormSchema>>;
248193
onSubmit: (values: z.infer<typeof createRegistryTokenFormSchema>) => void;
249-
manager: ReturnType<typeof usePermissionsManager>;
250194
setSelectedScope: (scope: 'no-access' | TargetAccessScope) => void;
251195
selectedScope: 'no-access' | TargetAccessScope;
252196
toggleModalOpen: () => void;
@@ -292,11 +236,8 @@ export function GenerateTokenContent(props: {
292236
dataCy="registry-access-scope"
293237
key={props.selectedScope}
294238
scope={RegistryAccessScope}
295-
canManageScope={
296-
props.manager.canAccessTarget(RegistryAccessScope.mapping['read-only']) ||
297-
props.manager.canAccessTarget(RegistryAccessScope.mapping['read-write'])
298-
}
299-
checkAccess={props.manager.canAccessTarget}
239+
canManageScope
240+
checkAccess={() => true}
300241
onChange={value => {
301242
if (value === 'no-access') {
302243
props.setSelectedScope('no-access');

packages/web/app/src/components/v2/modals/transfer-organization-ownership.tsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@ const MemberFields = graphql(`
6262
email
6363
}
6464
isOwner
65-
organizationAccessScopes
66-
projectAccessScopes
67-
targetAccessScopes
6865
}
6966
`);
7067

@@ -240,9 +237,6 @@ export const TransferOrganizationOwnershipModal = ({
240237
>
241238
{({ selected }: { selected?: boolean }) => (
242239
<div className="flex flex-row items-center justify-between gap-2">
243-
{/* <div className="ml-2.5 flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full bg-gray-800">
244-
<img src={member.image} className="block h-full w-full" />
245-
</div> */}
246240
<div className="ml-2 flex flex-1 flex-col gap-x-2">
247241
<div className="block truncate text-sm">{member.user.displayName}</div>
248242
<div className="text-xs font-normal text-gray-400">
Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { FragmentType, graphql, useFragment } from '@/gql';
22
import { TargetAccessScope } from '@/gql/graphql';
3-
import { useRedirect } from './common';
43

54
export { TargetAccessScope };
65

@@ -23,40 +22,3 @@ export function canAccessTarget(
2322

2423
return member.targetAccessScopes.includes(scope);
2524
}
26-
27-
export function useTargetAccess({
28-
scope,
29-
member: mmember,
30-
redirect = false,
31-
organizationSlug,
32-
projectSlug,
33-
targetSlug,
34-
}: {
35-
scope: TargetAccessScope;
36-
member: null | FragmentType<typeof CanAccessTarget_MemberFragment>;
37-
redirect?: boolean;
38-
organizationSlug: string;
39-
projectSlug: string;
40-
targetSlug: string;
41-
}) {
42-
const member = useFragment(CanAccessTarget_MemberFragment, mmember);
43-
const canAccess = canAccessTarget(scope, mmember);
44-
useRedirect({
45-
canAccess,
46-
redirectTo: redirect
47-
? router => {
48-
void router.navigate({
49-
to: '/$organizationSlug/$projectSlug/$targetSlug',
50-
params: {
51-
organizationSlug,
52-
projectSlug,
53-
targetSlug,
54-
},
55-
});
56-
}
57-
: undefined,
58-
entity: member,
59-
});
60-
61-
return canAccess;
62-
}

packages/web/app/src/stories/registry-access-token.stories.tsx

Lines changed: 0 additions & 119 deletions
This file was deleted.

0 commit comments

Comments
 (0)