Skip to content

Commit 6a33709

Browse files
authoredDec 5, 2023
chore(clerk-js,types): Remove system delete permission for domains and memberships (#2256)
The `delete` permission has been merged with `manage`
1 parent 608f9a5 commit 6a33709

File tree

11 files changed

+27
-53
lines changed

11 files changed

+27
-53
lines changed
 

‎.changeset/moody-zoos-deliver.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@clerk/clerk-js': patch
3+
'@clerk/types': patch
4+
---
5+
6+
Drop `org:sys_domains:delete` and `org:sys_memberships:delete` as those have now been merged with the respective `manage` ones.

‎packages/clerk-js/src/core/test/fixtures.ts

-2
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,8 @@ export const createOrganizationMembership = (params: OrgParams): OrganizationMem
5656
public_metadata: {},
5757
role: role || 'admin',
5858
permissions: permissions || [
59-
'org:sys_domains:delete',
6059
'org:sys_domains:manage',
6160
'org:sys_domains:read',
62-
'org:sys_memberships:delete',
6361
'org:sys_memberships:manage',
6462
'org:sys_memberships:read',
6563
'org:sys_profile:delete',

‎packages/clerk-js/src/ui.retheme/components/OrganizationProfile/ActiveMembersList.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ const MemberRow = (props: {
117117
</Gate>
118118
</Td>
119119
<Td>
120-
<Gate permission={'org:sys_memberships:delete'}>
120+
<Gate permission={'org:sys_memberships:manage'}>
121121
<ThreeDotsMenu
122122
actions={[
123123
{

‎packages/clerk-js/src/ui.retheme/components/OrganizationProfile/DomainList.tsx

+5-18
Original file line numberDiff line numberDiff line change
@@ -27,37 +27,24 @@ type DomainListProps = GetDomainsParams & {
2727
fallback?: React.ReactNode;
2828
};
2929

30-
const useDomainList = () => {
31-
const { isAuthorizedUser: canDeleteDomain } = useGate({ permission: 'org:sys_domains:delete' });
32-
const { isAuthorizedUser: canVerifyDomain } = useGate({ permission: 'org:sys_domains:manage' });
33-
34-
return {
35-
showDotMenu: canDeleteDomain || canVerifyDomain,
36-
canVerifyDomain,
37-
canDeleteDomain,
38-
};
39-
};
40-
4130
const buildDomainListRelativeURL = (parentPath: string, domainId: string, mode?: 'verify' | 'remove') =>
4231
trimLeadingSlash(stripOrigin(toURL(`${parentPath}/${domainId}/${mode || ''}`)));
4332

4433
const useMenuActions = (
4534
parentPath: string,
4635
domainId: string,
4736
): { label: LocalizationKey; onClick: () => Promise<unknown>; isDestructive?: boolean }[] => {
48-
const { canDeleteDomain, canVerifyDomain } = useDomainList();
37+
const { isAuthorizedUser: canManageDomain } = useGate({ permission: 'org:sys_domains:manage' });
4938
const { navigate } = useRouter();
5039

5140
const menuActions = [];
5241

53-
if (canVerifyDomain) {
42+
if (canManageDomain) {
5443
menuActions.push({
5544
label: localizationKeys('organizationProfile.profilePage.domainSection.unverifiedDomain_menuAction__verify'),
5645
onClick: () => navigate(buildDomainListRelativeURL(parentPath, domainId, 'verify')),
5746
});
58-
}
5947

60-
if (canDeleteDomain) {
6148
menuActions.push({
6249
label: localizationKeys('organizationProfile.profilePage.domainSection.unverifiedDomain_menuAction__remove'),
6350
isDestructive: true,
@@ -88,7 +75,7 @@ export const DomainList = withGate(
8875
},
8976
});
9077

91-
const { showDotMenu } = useDomainList();
78+
const { isAuthorizedUser: canManageDomain } = useGate({ permission: 'org:sys_domains:manage' });
9279
const { ref } = useInView({
9380
threshold: 0,
9481
onChange: inView => {
@@ -127,7 +114,7 @@ export const DomainList = withGate(
127114
<Col>
128115
{domainList.length === 0 && !domains?.isLoading && fallback}
129116
{domainList.map(d => {
130-
if (!(d.verification && d.verification.status === 'verified') || !showDotMenu) {
117+
if (!(d.verification && d.verification.status === 'verified') || !canManageDomain) {
131118
return (
132119
<BlockWithTrailingComponent
133120
key={d.id}
@@ -140,7 +127,7 @@ export const DomainList = withGate(
140127
})}
141128
badge={<EnrollmentBadge organizationDomain={d} />}
142129
trailingComponent={
143-
showDotMenu ? (
130+
canManageDomain ? (
144131
<DomainListDotMenu
145132
redirectSubPath={redirectSubPath}
146133
domainId={d.id}

‎packages/clerk-js/src/ui.retheme/components/OrganizationProfile/OrganizationProfileRoutes.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ export const OrganizationProfileRoutes = (props: PropsOfComponent<typeof Profile
6969
</Route>
7070
<Route path=':id/remove'>
7171
<Gate
72-
permission={'org:sys_domains:delete'}
72+
permission={'org:sys_domains:manage'}
7373
redirectTo='../../'
7474
>
7575
<RemoveDomainPage />
7676
</Gate>
7777
</Route>
7878
<Route path=':id'>
7979
<Gate
80-
some={[{ permission: 'org:sys_domains:manage' }, { permission: 'org:sys_domains:delete' }]}
80+
permission={'org:sys_domains:manage'}
8181
redirectTo='../../'
8282
>
8383
<VerifiedDomainPage />

‎packages/clerk-js/src/ui.retheme/components/OrganizationProfile/VerifiedDomainPage.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ export const VerifiedDomainPage = withCardStateProvider(() => {
107107
});
108108

109109
const { isAuthorizedUser: canManageDomain } = useGate({ permission: 'org:sys_domains:manage' });
110-
const { isAuthorizedUser: canDeleteDomain } = useGate({ permission: 'org:sys_domains:delete' });
111110

112111
const { navigateToFlowStart } = useNavigateToFlowStart();
113112
const { params, navigate, queryParams } = useRouter();
@@ -218,7 +217,7 @@ export const VerifiedDomainPage = withCardStateProvider(() => {
218217
)}
219218
/>
220219
)}
221-
{allowsEdit && canDeleteDomain && (
220+
{allowsEdit && canManageDomain && (
222221
<Tab
223222
localizationKey={localizationKeys('organizationProfile.verifiedDomainPage.start.headerTitle__danger')}
224223
/>
@@ -278,7 +277,7 @@ export const VerifiedDomainPage = withCardStateProvider(() => {
278277
</Form.Root>
279278
</TabPanel>
280279
)}
281-
{allowsEdit && canDeleteDomain && (
280+
{allowsEdit && canManageDomain && (
282281
<TabPanel
283282
direction={'col'}
284283
gap={4}

‎packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ const MemberRow = (props: {
117117
</Gate>
118118
</Td>
119119
<Td>
120-
<Gate permission={'org:sys_memberships:delete'}>
120+
<Gate permission={'org:sys_memberships:manage'}>
121121
<ThreeDotsMenu
122122
actions={[
123123
{

‎packages/clerk-js/src/ui/components/OrganizationProfile/DomainList.tsx

+6-19
Original file line numberDiff line numberDiff line change
@@ -27,37 +27,24 @@ type DomainListProps = GetDomainsParams & {
2727
fallback?: React.ReactNode;
2828
};
2929

30-
const useDomainList = () => {
31-
const { isAuthorizedUser: canDeleteDomain } = useGate({ permission: 'org:sys_domains:delete' });
32-
const { isAuthorizedUser: canVerifyDomain } = useGate({ permission: 'org:sys_domains:manage' });
33-
34-
return {
35-
showDotMenu: canDeleteDomain || canVerifyDomain,
36-
canVerifyDomain,
37-
canDeleteDomain,
38-
};
39-
};
40-
4130
const buildDomainListRelativeURL = (parentPath: string, domainId: string, mode?: 'verify' | 'remove') =>
4231
trimLeadingSlash(stripOrigin(toURL(`${parentPath}/${domainId}/${mode || ''}`)));
4332

4433
const useMenuActions = (
4534
parentPath: string,
4635
domainId: string,
4736
): { label: LocalizationKey; onClick: () => Promise<unknown>; isDestructive?: boolean }[] => {
48-
const { canDeleteDomain, canVerifyDomain } = useDomainList();
37+
const { isAuthorizedUser: canManageDomain } = useGate({ permission: 'org:sys_domains:manage' });
38+
4939
const { navigate } = useRouter();
5040

5141
const menuActions = [];
5242

53-
if (canVerifyDomain) {
43+
if (canManageDomain) {
5444
menuActions.push({
5545
label: localizationKeys('organizationProfile.profilePage.domainSection.unverifiedDomain_menuAction__verify'),
5646
onClick: () => navigate(buildDomainListRelativeURL(parentPath, domainId, 'verify')),
5747
});
58-
}
59-
60-
if (canDeleteDomain) {
6148
menuActions.push({
6249
label: localizationKeys('organizationProfile.profilePage.domainSection.unverifiedDomain_menuAction__remove'),
6350
isDestructive: true,
@@ -88,7 +75,7 @@ export const DomainList = withGate(
8875
},
8976
});
9077

91-
const { showDotMenu } = useDomainList();
78+
const { isAuthorizedUser: canManageDomain } = useGate({ permission: 'org:sys_domains:manage' });
9279
const { ref } = useInView({
9380
threshold: 0,
9481
onChange: inView => {
@@ -127,7 +114,7 @@ export const DomainList = withGate(
127114
<Col>
128115
{domainList.length === 0 && !domains?.isLoading && fallback}
129116
{domainList.map(d => {
130-
if (!(d.verification && d.verification.status === 'verified') || !showDotMenu) {
117+
if (!(d.verification && d.verification.status === 'verified') || !canManageDomain) {
131118
return (
132119
<BlockWithTrailingComponent
133120
key={d.id}
@@ -140,7 +127,7 @@ export const DomainList = withGate(
140127
})}
141128
badge={<EnrollmentBadge organizationDomain={d} />}
142129
trailingComponent={
143-
showDotMenu ? (
130+
canManageDomain ? (
144131
<DomainListDotMenu
145132
redirectSubPath={redirectSubPath}
146133
domainId={d.id}

‎packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfileRoutes.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ export const OrganizationProfileRoutes = (props: PropsOfComponent<typeof Profile
6969
</Route>
7070
<Route path=':id/remove'>
7171
<Gate
72-
permission={'org:sys_domains:delete'}
72+
permission={'org:sys_domains:manage'}
7373
redirectTo='../../'
7474
>
7575
<RemoveDomainPage />
7676
</Gate>
7777
</Route>
7878
<Route path=':id'>
7979
<Gate
80-
some={[{ permission: 'org:sys_domains:manage' }, { permission: 'org:sys_domains:delete' }]}
80+
permission={'org:sys_domains:manage'}
8181
redirectTo='../../'
8282
>
8383
<VerifiedDomainPage />

‎packages/clerk-js/src/ui/components/OrganizationProfile/VerifiedDomainPage.tsx

+2-3
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ export const VerifiedDomainPage = withCardStateProvider(() => {
107107
});
108108

109109
const { isAuthorizedUser: canManageDomain } = useGate({ permission: 'org:sys_domains:manage' });
110-
const { isAuthorizedUser: canDeleteDomain } = useGate({ permission: 'org:sys_domains:delete' });
111110

112111
const { navigateToFlowStart } = useNavigateToFlowStart();
113112
const { params, navigate, queryParams } = useRouter();
@@ -217,7 +216,7 @@ export const VerifiedDomainPage = withCardStateProvider(() => {
217216
)}
218217
/>
219218
)}
220-
{allowsEdit && canDeleteDomain && (
219+
{allowsEdit && canManageDomain && (
221220
<Tab
222221
localizationKey={localizationKeys('organizationProfile.verifiedDomainPage.start.headerTitle__danger')}
223222
/>
@@ -277,7 +276,7 @@ export const VerifiedDomainPage = withCardStateProvider(() => {
277276
</Form.Root>
278277
</TabPanel>
279278
)}
280-
{allowsEdit && canDeleteDomain && (
279+
{allowsEdit && canManageDomain && (
281280
<TabPanel
282281
direction={'col'}
283282
gap={4}

‎packages/types/src/organizationMembership.ts

-2
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,10 @@ export type MembershipRole = Autocomplete<'admin' | 'basic_member' | 'guest_memb
4444

4545
export type OrganizationPermission =
4646
| 'org:sys_domains:manage'
47-
| 'org:sys_domains:delete'
4847
| 'org:sys_profile:manage'
4948
| 'org:sys_profile:delete'
5049
| 'org:sys_memberships:read'
5150
| 'org:sys_memberships:manage'
52-
| 'org:sys_memberships:delete'
5351
| 'org:sys_domains:read';
5452

5553
export type UpdateOrganizationMembershipParams = {

0 commit comments

Comments
 (0)
Please sign in to comment.