Skip to content

Commit 30ae7de

Browse files
author
Maksym Mykhailenko
committed
Merge branch 'develop' into feature/bulk-milestone-updates
2 parents 436e8a7 + 95e1638 commit 30ae7de

File tree

17 files changed

+406
-240
lines changed

17 files changed

+406
-240
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

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+
```
Loading
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)

local/docker-compose.yml

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

local/full/docker-compose.yml

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
version: "2"
22
services:
33
jsonserver:
4-
extends:
5-
file: ../docker-compose.yml
6-
service: jsonserver
4+
build: "../mock-services"
5+
ports:
6+
- "3001:3001"
77
db:
8-
extends:
9-
file: ../docker-compose.yml
10-
service: db
8+
build: "../postgres-db"
9+
ports:
10+
- "5432:5432"
1111
environment:
12+
- POSTGRES_PASSWORD=mysecretpassword
13+
- POSTGRES_USER=coder
1214
- POSTGRES_MULTIPLE_DATABASES=projectsdb,projectsdb_test,tc_notifications
1315
esearch:
14-
extends:
15-
file: ../docker-compose.yml
16-
service: esearch
16+
image: "elasticsearch:2.3"
17+
ports:
18+
- "9200:9200"
19+
- "9300:9300"
1720
queue:
18-
extends:
19-
file: ../docker-compose.yml
20-
service: queue
21+
image: "rabbitmq:3-management"
22+
restart: always
23+
ports:
24+
- "5672:5672"
25+
- "15672:15672"
2126
zookeeper:
2227
image: wurstmeister/zookeeper
2328
ports:

local/light/docker-compose.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
version: "2"
2+
services:
3+
jsonserver:
4+
extends:
5+
file: ../full/docker-compose.yml
6+
service: jsonserver
7+
8+
db:
9+
extends:
10+
file: ../full/docker-compose.yml
11+
service: db
12+
environment:
13+
- POSTGRES_MULTIPLE_DATABASES=projectsdb,projectsdb_test
14+
15+
esearch:
16+
extends:
17+
file: ../full/docker-compose.yml
18+
service: esearch
19+
20+
queue:
21+
extends:
22+
file: ../full/docker-compose.yml
23+
service: queue

package-lock.json

Lines changed: 52 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,30 @@
77
"node": ">=12"
88
},
99
"scripts": {
10-
"lint": "./node_modules/.bin/eslint .",
11-
"lint:fix": "./node_modules/.bin/eslint . --fix || true",
10+
"lint": "eslint .",
11+
"lint:fix": "eslint . --fix || true",
1212
"build": "babel src -d dist --presets es2015 --copy-files",
13-
"sync:all": "NODE_ENV=development npm run sync:db && NODE_ENV=development npm run sync:es",
14-
"sync:db": "./node_modules/.bin/babel-node migrations/sync.js",
15-
"sync:es": "./node_modules/.bin/babel-node migrations/elasticsearch_sync.js",
16-
"sync:es:metadata": "./node_modules/.bin/babel-node migrations/elasticsearch_sync.js --index-name metadata",
17-
"migrate:es": "./node_modules/.bin/babel-node migrations/seedElasticsearchIndex.js",
18-
"migrate:es:metadata": "./node_modules/.bin/babel-node migrations/helpers/indexMetadataDirectly.js",
19-
"migrate:bookmarks": "./node_modules/.bin/babel-node migrations/bookmarks/migrateBookmarksToLinks.js",
20-
"migrate:bookmarks:revert": "./node_modules/.bin/babel-node migrations/bookmarks/migrateLinksToBookmarks.js",
2113
"prestart": "npm run -s build",
2214
"start": "node dist",
23-
"start:dev": "NODE_ENV=development PORT=8001 nodemon -w src --exec \"node --require dotenv/config --require babel-core/register src\" | ./node_modules/.bin/bunyan",
15+
"start:dev": "cross-env NODE_ENV=development PORT=8001 nodemon -w src --exec \"npm run babel-node-script -- src\" | bunyan",
2416
"startKafkaConsumers": "npm run -s build && node dist/index-kafka.js",
25-
"startKafkaConsumers:dev": "NODE_ENV=development nodemon -w src --exec \"babel-node src/index-kafka.js --presets es2015\" | ./node_modules/.bin/bunyan",
26-
"test": "NODE_ENV=test npm run lint && NODE_ENV=test npm run sync:es && NODE_ENV=test npm run sync:db && NODE_ENV=test ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -- --timeout 10000 --require babel-core/register $(find src -path '*spec.js*') --exit",
27-
"test:watch": "NODE_ENV=test ./node_modules/.bin/mocha -w --require babel-core/register $(find src -path '*spec.js*')",
28-
"demo-data": "babel-node local/seed",
29-
"es-db-compare": "babel-node scripts/es-db-compare",
30-
"data:export": "NODE_ENV=development LOG_LEVEL=info node --require dotenv/config --require babel-core/register scripts/data/export",
31-
"data:import": "NODE_ENV=development LOG_LEVEL=info node --require dotenv/config --require babel-core/register scripts/data/import",
32-
"local:run-docker": "docker-compose -f ./local/full/docker-compose.yml up -d",
33-
"local:init": "npm run sync:all && npm run data:import",
34-
"generate:doc:permissions": "babel-node scripts/permissions-doc",
35-
"generate:doc:permissions:dev": "nodemon --watch scripts/permissions-doc --watch src --ext js,jsx,hbs --exec babel-node scripts/permissions-doc"
17+
"startKafkaConsumers:dev": "cross-env NODE_ENV=development nodemon -w src --exec \"npm run babel-node-script src/index-kafka.js\" | bunyan",
18+
"test": "cross-env NODE_ENV=test npm run lint && cross-env NODE_ENV=test npm run reset:all && cross-env NODE_ENV=test istanbul cover node_modules/mocha/bin/_mocha -- --timeout 10000 --require babel-core/register \"./src/**/*.spec.js*\" --exit",
19+
"test:watch": "cross-env NODE_ENV=test mocha -w --require babel-core/register \"./src/**/*.spec.js*\" ",
20+
"reset:all": "npm run reset:db && npm run reset:es",
21+
"reset:db": "npm run babel-node-script -- migrations/sync.js",
22+
"reset:es": "npm run babel-node-script -- migrations/elasticsearch_sync.js",
23+
"import-from-api": "npm run babel-node-script -- scripts/import-from-api",
24+
"es-db-compare": "npm run babel-node-script -- scripts/es-db-compare",
25+
"data:export": "cross-env NODE_ENV=development LOG_LEVEL=info npm run babel-node-script -- scripts/data/export",
26+
"data:import": "cross-env NODE_ENV=development LOG_LEVEL=info npm run babel-node-script -- scripts/data/import",
27+
"services:up": "docker-compose -f ./local/full/docker-compose.yml up -d",
28+
"services:down": "docker-compose -f ./local/full/docker-compose.yml down",
29+
"services:logs": "docker-compose -f ./local/full/docker-compose.yml logs",
30+
"local:init": "npm run reset:all && npm run data:import",
31+
"babel-node-script": "node --require dotenv/config --require babel-core/register",
32+
"generate:doc:permissions": "npm run babel-node-script -- scripts/permissions-doc",
33+
"generate:doc:permissions:dev": "nodemon --watch scripts/permissions-doc --watch src --ext js,jsx,hbs --exec --exec \"npm run babel-node-script scripts/permissions-doc\""
3634
},
3735
"repository": {
3836
"type": "git",
@@ -93,6 +91,7 @@
9391
"bunyan": "^1.8.12",
9492
"chai": "^3.5.0",
9593
"chai-as-promised": "^7.1.1",
94+
"cross-env": "^7.0.2",
9695
"eslint": "^6.8.0",
9796
"eslint-config-airbnb-base": "^11.1.0",
9897
"eslint-plugin-import": "^2.2.0",
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)