Skip to content

Commit 2f82d14

Browse files
author
Maksym Mykhailenko
committed
Merge branch 'develop' into feature/members-invites-permission-fixes
# Conflicts: # src/permissions/constants.js # src/routes/projects/get.js # src/routes/projects/get.spec.js # src/routes/projects/list.js # src/routes/projects/list.spec.js
2 parents da6dee6 + 61aa6a2 commit 2f82d14

File tree

264 files changed

+9614
-8844
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

264 files changed

+9614
-8844
lines changed

.eslintignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
config/local.js
22
config/mock.local.js
33
config/m2m.local.js
4-
local/seed/
4+
scripts/import-from-api/
55
node_modules
66
dist
77
.ebextensions

.eslintrc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@
1010
"rules": {
1111
"import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js", "src/tests/*.js"]}],
1212
"max-len": ["error", { "ignoreComments": true, "code": 120 }],
13+
"valid-jsdoc": ["error", {
14+
"requireReturn": true,
15+
"requireReturnType": true,
16+
"requireParamDescription": true,
17+
"requireReturnDescription": true
18+
}],
1319
"require-jsdoc": ["error", {
1420
"require": {
1521
"FunctionDeclaration": true,
1622
"MethodDefinition": true,
1723
"ClassDeclaration": true
1824
}
19-
}],
20-
"indent": 0,
21-
"no-multi-spaces": 0,
22-
"valid-jsdoc": 0
25+
}]
2326
}
2427
}

README.md

Lines changed: 139 additions & 98 deletions
Large diffs are not rendered by default.

config/development.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22
"pubsubQueueName": "dev.project.service",
33
"pubsubExchangeName": "dev.projects",
44
"attachmentsS3Bucket": "topcoder-dev-media",
5-
"connectProjectsUrl": "https://connect.topcoder-dev.com/projects/"
5+
"connectProjectsUrl": "https://connect.topcoder-dev.com/projects/",
6+
"fileServiceEndpoint": "https://api.topcoder-dev.com/v3/files/",
7+
"connectProjectsUrl": "https://connect.topcoder-dev.com/projects/",
8+
"memberServiceEndpoint": "https://api.topcoder-dev.com/v3/members"
69
}

docs/guides/architercture/architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,4 @@ payload: {
7373
"updatedBy": 1,
7474
},
7575
}
76-
```
76+
```
104 KB
Loading
182 KB
Loading
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Permissions Guide
2+
3+
What kind of permissions we have, how they work and how to use them.
4+
5+
- [Overview](#overview)
6+
- [Topcoder Roles](#topcoder-roles)
7+
- [Project Role](#project-role)
8+
- [How to Use](#how-to-use)
9+
- [References](#references)
10+
11+
## Overview
12+
13+
Every user may have 2 kind of roles: **Topcoder Roles** and **Project Role**.
14+
15+
### Topcoder Roles
16+
17+
These roles are assigned to user accounts. User may have several **Topcoder Roles**. See [the list of all Topcoder Roles](https://github.com/topcoder-platform/tc-project-service/blob/develop/src/constants.js#L55-L69) which we use in Topcoder Project Service.
18+
19+
<img src="./images/topcoder-roles.png" width="689">
20+
21+
By default every user has one role `Topcoder User`, generally this means that such a user is either **customer** or **community member** (freelancer).
22+
23+
### Project Role
24+
25+
When user joins some project and become a member of the project, such a user has one **Project Role** inside that project. One user may have different **Project Role** in different projects. See [the list of all Project Roles](https://github.com/topcoder-platform/tc-project-service/blob/develop/src/constants.js#L23-L33) which we use in Topcoder Project Service.
26+
27+
<img src="./images/project-roles.png" width="411">
28+
29+
## How to Use
30+
31+
Let's say you would like to add a new place in code where you want to check user roles/permissions. Please, follow the next guide:
32+
33+
1. Check if we already have defined permission for your case in the [permissions list](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html).
34+
35+
2. If you cannot find the permission you need, add new permission to the file https://github.com/topcoder-platform/tc-project-service/blob/develop/src/permissions/constants.js.
36+
37+
- Follow the guides on how to add a new permission in the header of this file.
38+
39+
3. After you add a new permission, regenerate [permissions list](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html) by running `npm run generate:doc:permissions`.
40+
41+
4. There are 2 places where you would usually check permissions:
42+
1. Check if user can call some endpoint (https://github.com/topcoder-platform/tc-project-service/blob/develop/src/permissions/index.js):
43+
44+
```js
45+
Authorizer.setPolicy('projectMember.view', generalPermission(PERMISSION.READ_PROJECT_MEMBER));
46+
```
47+
48+
or
49+
50+
```js
51+
Authorizer.setPolicy('projectMember.edit', generalPermission([
52+
PERMISSION.UPDATE_PROJECT_MEMBER_CUSTOMER,
53+
PERMISSION.UPDATE_PROJECT_MEMBER_NON_CUSTOMER,
54+
]));
55+
```
56+
57+
2. Inside some endpoint code:
58+
59+
```js
60+
import util from '../util';
61+
import { PERMISSION } from '../permissions/constants';
62+
63+
(req, res, next) => {
64+
...
65+
if (hasPermissionByReq(permission, req)) {
66+
...
67+
}
68+
...
69+
}
70+
```
71+
72+
## References
73+
74+
- [Permissions list](https://htmlpreview.github.io/?https://github.com/topcoder-platform/tc-project-service/blob/develop/docs/permissions.html)
75+
76+
- [Permissions list source](https://github.com/topcoder-platform/tc-project-service/blob/develop/src/permissions/constants.js)

docs/permissions.html

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,221 @@ <h2 class="anchor-container">
939939
</div>
940940
</div>
941941
</div>
942+
<div class="row">
943+
<div class="col pt-5 pb-2">
944+
<h2 class="anchor-container">
945+
<a href="#section-project-attachment" name="section-project-attachment" class="anchor"></a>Project Attachment
946+
</h2>
947+
</div>
948+
</div>
949+
<div class="row border-top">
950+
<div class="col py-2">
951+
<div class="permission-title anchor-container">
952+
<a href="#CREATE_PROJECT_ATTACHMENT" name="CREATE_PROJECT_ATTACHMENT" class="anchor"></a>Create Project Attachment
953+
</div>
954+
<div class="permission-variable"><small><code>CREATE_PROJECT_ATTACHMENT</code></small></div>
955+
<div class="text-black-50 small-text"></div>
956+
</div>
957+
<div class="col-9 py-2">
958+
<div>
959+
<span class="badge badge-primary" title="Allowed">Any Project Member</span>
960+
</div>
961+
962+
<div>
963+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
964+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
965+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Manager</span>
966+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Account Manager</span>
967+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Copilot Manager</span>
968+
<span class="badge badge-success" title="Allowed Topcoder Role">Business Development Representative</span>
969+
<span class="badge badge-success" title="Allowed Topcoder Role">Presales</span>
970+
<span class="badge badge-success" title="Allowed Topcoder Role">Account Executive</span>
971+
<span class="badge badge-success" title="Allowed Topcoder Role">Program Manager</span>
972+
<span class="badge badge-success" title="Allowed Topcoder Role">Solution Architect</span>
973+
<span class="badge badge-success" title="Allowed Topcoder Role">Project Manager</span>
974+
</div>
975+
976+
<div>
977+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
978+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
979+
<span class="badge badge-dark" title="Allowed Topcoder Role">write:projects</span>
980+
</div>
981+
</div>
982+
</div>
983+
<div class="row border-top">
984+
<div class="col py-2">
985+
<div class="permission-title anchor-container">
986+
<a href="#READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED" name="READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED" class="anchor"></a>Read Project Attachment (own or allowed)
987+
</div>
988+
<div class="permission-variable"><small><code>READ_PROJECT_ATTACHMENT_OWN_OR_ALLOWED</code></small></div>
989+
<div class="text-black-50 small-text">Who can view own attachment or an attachment of another user when they are in the &quot;allowed&quot; list.</div>
990+
</div>
991+
<div class="col-9 py-2">
992+
<div>
993+
<span class="badge badge-primary" title="Allowed">Any Project Member</span>
994+
</div>
995+
996+
<div>
997+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
998+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
999+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Manager</span>
1000+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Account Manager</span>
1001+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Copilot Manager</span>
1002+
<span class="badge badge-success" title="Allowed Topcoder Role">Business Development Representative</span>
1003+
<span class="badge badge-success" title="Allowed Topcoder Role">Presales</span>
1004+
<span class="badge badge-success" title="Allowed Topcoder Role">Account Executive</span>
1005+
<span class="badge badge-success" title="Allowed Topcoder Role">Program Manager</span>
1006+
<span class="badge badge-success" title="Allowed Topcoder Role">Solution Architect</span>
1007+
<span class="badge badge-success" title="Allowed Topcoder Role">Project Manager</span>
1008+
</div>
1009+
1010+
<div>
1011+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
1012+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
1013+
<span class="badge badge-dark" title="Allowed Topcoder Role">read:projects</span>
1014+
</div>
1015+
</div>
1016+
</div>
1017+
<div class="row border-top">
1018+
<div class="col py-2">
1019+
<div class="permission-title anchor-container">
1020+
<a href="#READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED" name="READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED" class="anchor"></a>Read Project Attachment (not own and not allowed)
1021+
</div>
1022+
<div class="permission-variable"><small><code>READ_PROJECT_ATTACHMENT_NOT_OWN_AND_NOT_ALLOWED</code></small></div>
1023+
<div class="text-black-50 small-text">Who can view attachment of another user when they are not in &quot;allowed&quot; users list.</div>
1024+
</div>
1025+
<div class="col-9 py-2">
1026+
<div>
1027+
</div>
1028+
1029+
<div>
1030+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
1031+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
1032+
</div>
1033+
1034+
<div>
1035+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
1036+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
1037+
<span class="badge badge-dark" title="Allowed Topcoder Role">read:projects</span>
1038+
</div>
1039+
</div>
1040+
</div>
1041+
<div class="row border-top">
1042+
<div class="col py-2">
1043+
<div class="permission-title anchor-container">
1044+
<a href="#UPDATE_PROJECT_ATTACHMENT_OWN" name="UPDATE_PROJECT_ATTACHMENT_OWN" class="anchor"></a>Update Project Attachment (own)
1045+
</div>
1046+
<div class="permission-variable"><small><code>UPDATE_PROJECT_ATTACHMENT_OWN</code></small></div>
1047+
<div class="text-black-50 small-text">Who can edit attachment they created.</div>
1048+
</div>
1049+
<div class="col-9 py-2">
1050+
<div>
1051+
<span class="badge badge-primary" title="Allowed">Any Project Member</span>
1052+
</div>
1053+
1054+
<div>
1055+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
1056+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
1057+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Manager</span>
1058+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Account Manager</span>
1059+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Copilot Manager</span>
1060+
<span class="badge badge-success" title="Allowed Topcoder Role">Business Development Representative</span>
1061+
<span class="badge badge-success" title="Allowed Topcoder Role">Presales</span>
1062+
<span class="badge badge-success" title="Allowed Topcoder Role">Account Executive</span>
1063+
<span class="badge badge-success" title="Allowed Topcoder Role">Program Manager</span>
1064+
<span class="badge badge-success" title="Allowed Topcoder Role">Solution Architect</span>
1065+
<span class="badge badge-success" title="Allowed Topcoder Role">Project Manager</span>
1066+
</div>
1067+
1068+
<div>
1069+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
1070+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
1071+
<span class="badge badge-dark" title="Allowed Topcoder Role">write:projects</span>
1072+
</div>
1073+
</div>
1074+
</div>
1075+
<div class="row border-top">
1076+
<div class="col py-2">
1077+
<div class="permission-title anchor-container">
1078+
<a href="#UPDATE_PROJECT_ATTACHMENT_NOT_OWN" name="UPDATE_PROJECT_ATTACHMENT_NOT_OWN" class="anchor"></a>Update Project Attachment (not own)
1079+
</div>
1080+
<div class="permission-variable"><small><code>UPDATE_PROJECT_ATTACHMENT_NOT_OWN</code></small></div>
1081+
<div class="text-black-50 small-text">Who can edit attachment created by another user.</div>
1082+
</div>
1083+
<div class="col-9 py-2">
1084+
<div>
1085+
</div>
1086+
1087+
<div>
1088+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
1089+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
1090+
</div>
1091+
1092+
<div>
1093+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
1094+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
1095+
<span class="badge badge-dark" title="Allowed Topcoder Role">write:projects</span>
1096+
</div>
1097+
</div>
1098+
</div>
1099+
<div class="row border-top">
1100+
<div class="col py-2">
1101+
<div class="permission-title anchor-container">
1102+
<a href="#DELETE_PROJECT_ATTACHMENT_OWN" name="DELETE_PROJECT_ATTACHMENT_OWN" class="anchor"></a>Delete Project Attachment (own)
1103+
</div>
1104+
<div class="permission-variable"><small><code>DELETE_PROJECT_ATTACHMENT_OWN</code></small></div>
1105+
<div class="text-black-50 small-text">Who can delete attachment they created.</div>
1106+
</div>
1107+
<div class="col-9 py-2">
1108+
<div>
1109+
<span class="badge badge-primary" title="Allowed">Any Project Member</span>
1110+
</div>
1111+
1112+
<div>
1113+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
1114+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
1115+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Manager</span>
1116+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Account Manager</span>
1117+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Copilot Manager</span>
1118+
<span class="badge badge-success" title="Allowed Topcoder Role">Business Development Representative</span>
1119+
<span class="badge badge-success" title="Allowed Topcoder Role">Presales</span>
1120+
<span class="badge badge-success" title="Allowed Topcoder Role">Account Executive</span>
1121+
<span class="badge badge-success" title="Allowed Topcoder Role">Program Manager</span>
1122+
<span class="badge badge-success" title="Allowed Topcoder Role">Solution Architect</span>
1123+
<span class="badge badge-success" title="Allowed Topcoder Role">Project Manager</span>
1124+
</div>
1125+
1126+
<div>
1127+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
1128+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
1129+
<span class="badge badge-dark" title="Allowed Topcoder Role">write:projects</span>
1130+
</div>
1131+
</div>
1132+
</div>
1133+
<div class="row border-top">
1134+
<div class="col py-2">
1135+
<div class="permission-title anchor-container">
1136+
<a href="#DELETE_PROJECT_ATTACHMENT_NOT_OWN" name="DELETE_PROJECT_ATTACHMENT_NOT_OWN" class="anchor"></a>Delete Project Attachment (not own)
1137+
</div>
1138+
<div class="permission-variable"><small><code>DELETE_PROJECT_ATTACHMENT_NOT_OWN</code></small></div>
1139+
<div class="text-black-50 small-text">Who can delete attachment created by another user.</div>
1140+
</div>
1141+
<div class="col-9 py-2">
1142+
<div>
1143+
</div>
1144+
1145+
<div>
1146+
<span class="badge badge-success" title="Allowed Topcoder Role">Connect Admin</span>
1147+
<span class="badge badge-success" title="Allowed Topcoder Role">administrator</span>
1148+
</div>
1149+
1150+
<div>
1151+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:connect_project</span>
1152+
<span class="badge badge-dark" title="Allowed Topcoder Role">all:projects</span>
1153+
<span class="badge badge-dark" title="Allowed Topcoder Role">write:projects</span>
1154+
</div>
1155+
</div>
1156+
</div>
9421157
<div class="row">
9431158
<div class="col pt-5 pb-2">
9441159
<h2 class="anchor-container">

local/docker-compose.yml

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

0 commit comments

Comments
 (0)