Skip to content

Commit 01bd505

Browse files
committed
refactor(permissions-provider): change teamMember query with environmentMember
1 parent 755b058 commit 01bd505

File tree

5 files changed

+115
-101
lines changed

5 files changed

+115
-101
lines changed

packages/permissions-provider/src/PermissionsProvider.tsx

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import React from 'react';
22
import { DocumentNode } from 'graphql';
33
import gql from 'graphql-tag';
4-
import * as R from 'ramda';
54
import { Query } from 'react-apollo';
65
import { withAuth, WithAuthProps } from '@8base-react/auth';
76

87
import { PermissionsContext } from './PermissionsContext';
9-
import { getPermissions } from './getPermissions';
8+
import { getPermissions, getRoles } from './utils';
109
import { RequestPermissions } from './types';
1110

1211
const USER_PERMISSIONS_QUERY = gql`
@@ -32,19 +31,21 @@ const USER_PERMISSIONS_QUERY = gql`
3231

3332
const TEAM_MEMBER_PERMISSIONS_QUERY = gql`
3433
query TeamMemberPermissions {
35-
teamMember {
36-
id
37-
permissions {
38-
items {
39-
resource
40-
resourceType
41-
permission
34+
system {
35+
environmentMember {
36+
email
37+
permissions {
38+
items {
39+
resource
40+
resourceType
41+
permission
42+
}
4243
}
43-
}
44-
roles {
45-
items {
46-
id
47-
name
44+
roles {
45+
items {
46+
id
47+
name
48+
}
4849
}
4950
}
5051
}
@@ -84,11 +85,7 @@ const PermissionsProvider: React.ComponentType<PermissionsProviderProps> = withA
8485
const { type = 'teamMember' } = this.props;
8586

8687
const permissions = getPermissions(data, type);
87-
88-
const roles = R.pipe(
89-
R.pathOr([], [type, 'roles', 'items']),
90-
R.map(({ name }) => name),
91-
)(data);
88+
const roles = getRoles(data, type);
9289

9390
return (
9491
<PermissionsContext.Provider value={{ permissions, roles }}>

packages/permissions-provider/src/getPermissions.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import * as R from 'ramda';
2+
import { RequestPermissions, TransformedPermissions, ApolloPermission } from './types';
3+
4+
const PERMISSIONS_PATH = {
5+
teamMember: ['system', 'environmentMember'],
6+
user: ['user'],
7+
};
8+
9+
export const getPermissions = (data: RequestPermissions, type: 'teamMember' | 'user'): TransformedPermissions =>
10+
R.pipe(
11+
R.pathOr([], PERMISSIONS_PATH[type]),
12+
R.pipe(
13+
R.pathOr([], ['permissions', 'items']),
14+
R.groupBy<ApolloPermission>(R.prop('resourceType')),
15+
R.mapObjIndexed(R.indexBy<ApolloPermission>(R.prop('resource'))),
16+
),
17+
)(data);
18+
19+
export const getRoles = (data: RequestPermissions, type: 'teamMember' | 'user'): string[] =>
20+
R.pipe(
21+
R.pathOr([], [...PERMISSIONS_PATH[type], 'roles', 'items']),
22+
R.map(({ name }) => name),
23+
)(data);

packages/permissions-provider/test/__tests__/IfAllowedRoles.test.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import * as renderer from 'react-test-renderer';
44
import { PermissionsProvider, IfAllowedRoles } from '../../src';
55

66
const mockPermissionsData = {
7-
teamMember: {
8-
roles: {
9-
items: [
10-
{
11-
id: '1',
12-
name: 'Admin',
13-
},
14-
{
15-
id: '2',
16-
name: 'Support',
17-
},
18-
],
7+
system: {
8+
environmentMember: {
9+
roles: {
10+
items: [
11+
{
12+
id: '1',
13+
name: 'Admin',
14+
},
15+
{
16+
id: '2',
17+
name: 'Support',
18+
},
19+
],
20+
},
1921
},
2022
},
2123
};

packages/permissions-provider/test/__tests__/index.test.tsx

Lines changed: 62 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -10,68 +10,72 @@ import {
1010
usePermissions,
1111
} from '../../src';
1212

13-
const mockPermissionsData = {
14-
teamMember: {
15-
permissions: {
16-
items: [
17-
{
18-
resource: 'Users',
19-
resourceType: 'data',
20-
permission: {
21-
create: {
22-
allow: true,
23-
},
24-
delete: {
25-
allow: true,
26-
},
27-
read: {
28-
allow: true,
29-
fields: {
30-
createdAt: true,
31-
updatedAt: true,
32-
email: true,
33-
isOwner: true,
34-
firstName: true,
35-
lastName: true,
36-
cellPhone: true,
37-
workPhone: true,
38-
workPhoneExt: true,
39-
gender: true,
40-
birthday: true,
41-
language: true,
42-
timezone: true,
43-
},
44-
},
45-
update: {
46-
allow: true,
47-
fields: {
48-
createdAt: true,
49-
updatedAt: true,
50-
email: false,
51-
isOwner: true,
52-
firstName: true,
53-
lastName: true,
54-
cellPhone: true,
55-
workPhone: true,
56-
workPhoneExt: true,
57-
gender: true,
58-
birthday: true,
59-
language: true,
60-
timezone: true,
61-
},
62-
},
13+
const mockPermissions = {
14+
items: [
15+
{
16+
resource: 'Users',
17+
resourceType: 'data',
18+
permission: {
19+
create: {
20+
allow: true,
21+
},
22+
delete: {
23+
allow: true,
24+
},
25+
read: {
26+
allow: true,
27+
fields: {
28+
createdAt: true,
29+
updatedAt: true,
30+
email: true,
31+
isOwner: true,
32+
firstName: true,
33+
lastName: true,
34+
cellPhone: true,
35+
workPhone: true,
36+
workPhoneExt: true,
37+
gender: true,
38+
birthday: true,
39+
language: true,
40+
timezone: true,
6341
},
6442
},
65-
{
66-
resource: 'schema',
67-
resourceType: 'custom',
68-
permission: {
69-
edit: {
70-
allow: false,
71-
},
43+
update: {
44+
allow: true,
45+
fields: {
46+
createdAt: true,
47+
updatedAt: true,
48+
email: false,
49+
isOwner: true,
50+
firstName: true,
51+
lastName: true,
52+
cellPhone: true,
53+
workPhone: true,
54+
workPhoneExt: true,
55+
gender: true,
56+
birthday: true,
57+
language: true,
58+
timezone: true,
7259
},
7360
},
74-
],
61+
},
62+
},
63+
{
64+
resource: 'schema',
65+
resourceType: 'custom',
66+
permission: {
67+
edit: {
68+
allow: false,
69+
},
70+
},
71+
},
72+
],
73+
};
74+
75+
const mockPermissionsData = {
76+
system: {
77+
environmentMember: {
78+
permissions: mockPermissions,
7579
},
7680
},
7781
};

0 commit comments

Comments
 (0)