Skip to content

Commit cfc1399

Browse files
authored
feat(users): add active users compute (#122)
* feat(users): add active users compute * feat(users): update compute active users select * feat: update microservices deps * feat: update microservices deps * feat(users): add active users method permissions * feat(users): add active users models permissions * feat(users): update http requests * feat(users): remove redundant active users endpoint * feat(users): update http requests * feat(users): update http requests * feat(authentication): update count endpoint method options * feat(authentication): update common permissions * feat(authentication): update deps * feat(authorization): update enforce method options for microservices helpers * feat(users): update http requests * feat: update microservices deps * feat: update microservices deps * feat(authorization): add get init condition state for merge payload filters with method * feat(authorization): add user roles mock * feat(authorization): clean up * feat(authentication): add allow method options filter for token count * chore(authorization): update filters title * chore(authorization): update allow distinct filter and tests * chore(authorization): clean up
1 parent 036fc17 commit cfc1399

File tree

29 files changed

+406
-329
lines changed

29 files changed

+406
-329
lines changed

http-requests/users/requests.http

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
### Get unique active users
2+
POST http://127.0.0.1:3000
3+
Accept: application/json
4+
Content-Type: application/json
5+
## Admin token
6+
Authorization: Bearer admintokenooooooooooooooooooooon
7+
## User token
8+
#Authorization: Bearer usertokenooooooooooooooooooooooo
9+
10+
{
11+
"id": "1",
12+
"method": "authentication.token.count",
13+
"params": {
14+
"query": {
15+
"attributes": [
16+
{
17+
"name": "userId",
18+
"isDistinct": true
19+
}
20+
]
21+
}
22+
}
23+
}

microservices/authentication/package-lock.json

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

microservices/authentication/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
},
4242
"dependencies": {
4343
"@lomray/cookie": "^0.6.2",
44-
"@lomray/microservice-helpers": "^2.10.1",
44+
"@lomray/microservice-helpers": "^2.14.0",
4545
"class-validator": "^0.14.0",
4646
"class-validator-jsonschema": "^5.0.0",
4747
"jsonwebtoken": "^9.0.1",
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
const allUserRolesMock = ['admins', 'users', 'guests']; // order matters
2+
3+
// eslint-disable-next-line import/prefer-default-export
4+
export { allUserRolesMock };

microservices/authorization/__tests__/services/method-filters-test.ts

Lines changed: 55 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TypeormMock } from '@lomray/microservice-helpers/mocks';
22
import { expect } from 'chai';
3+
import { allUserRolesMock } from '@__mocks__/user-roles';
34
import { FilterIgnoreType, FilterOperator } from '@constants/filter';
45
import MethodFiltersEntity from '@entities/method-filter';
56
import MethodFilters from '@services/method-filters';
@@ -80,10 +81,10 @@ describe('services/method-filters', () => {
8081
});
8182

8283
it('should correctly collect filters for method: admins role', () => {
83-
const userRoles = ['admins', 'users', 'guests']; // order matters
84-
const filters = MethodFilters.init({ userRoles, templateOptions: { userId } }).getFilters(
85-
methodFilters,
86-
);
84+
const filters = MethodFilters.init({
85+
userRoles: allUserRolesMock,
86+
templateOptions: { userId },
87+
}).getFilters(methodFilters);
8788

8889
expect(filters).to.deep.equal({
8990
options: guests.filter.condition.options,
@@ -97,12 +98,10 @@ describe('services/method-filters', () => {
9798

9899
it('should correctly collect filters for method: collect for admins - except users filter', () => {
99100
const usersFilter = { ...users, operator: 'only' };
100-
const userRoles = ['admins', 'users', 'guests']; // order matters
101-
const filters = MethodFilters.init({ userRoles, templateOptions: { userId } }).getFilters([
102-
methodFilters[0],
103-
usersFilter,
104-
methodFilters[2],
105-
]);
101+
const filters = MethodFilters.init({
102+
userRoles: allUserRolesMock,
103+
templateOptions: { userId },
104+
}).getFilters([methodFilters[0], usersFilter, methodFilters[2]]);
106105

107106
expect(filters).to.deep.equal({
108107
options: guests.filter.condition.options,
@@ -119,12 +118,10 @@ describe('services/method-filters', () => {
119118
...guests,
120119
filter: { ...guests.filter, ignore: { users: FilterIgnoreType.stop } },
121120
};
122-
const userRoles = ['admins', 'users', 'guests']; // order matters
123-
const filters = MethodFilters.init({ userRoles, templateOptions: { userId } }).getFilters([
124-
guestFilter,
125-
methodFilters[1],
126-
methodFilters[2],
127-
]);
121+
const filters = MethodFilters.init({
122+
userRoles: allUserRolesMock,
123+
templateOptions: { userId },
124+
}).getFilters([guestFilter, methodFilters[1], methodFilters[2]]);
128125

129126
expect(filters).to.deep.equal({
130127
query: {
@@ -140,12 +137,10 @@ describe('services/method-filters', () => {
140137
...guests,
141138
filter: { ...guests.filter, ignore: { admins: FilterIgnoreType.stop } },
142139
};
143-
const userRoles = ['admins', 'users', 'guests']; // order matters
144-
const filters = MethodFilters.init({ userRoles, templateOptions: { userId } }).getFilters([
145-
guestFilter,
146-
methodFilters[1],
147-
methodFilters[2],
148-
]);
140+
const filters = MethodFilters.init({
141+
userRoles: allUserRolesMock,
142+
templateOptions: { userId },
143+
}).getFilters([guestFilter, methodFilters[1], methodFilters[2]]);
149144

150145
expect(filters).to.deep.equal({
151146
query: {
@@ -161,12 +156,10 @@ describe('services/method-filters', () => {
161156
...guests,
162157
filter: { ...guests.filter, ignore: { users: FilterIgnoreType.only } },
163158
};
164-
const userRoles = ['admins', 'users', 'guests']; // order matters
165-
const filters = MethodFilters.init({ userRoles, templateOptions: { userId } }).getFilters([
166-
guestFilter,
167-
methodFilters[1],
168-
methodFilters[2],
169-
]);
159+
const filters = MethodFilters.init({
160+
userRoles: allUserRolesMock,
161+
templateOptions: { userId },
162+
}).getFilters([guestFilter, methodFilters[1], methodFilters[2]]);
170163

171164
expect(filters).to.deep.equal({
172165
options: guests.filter.condition.options,
@@ -254,11 +247,12 @@ describe('services/method-filters', () => {
254247
},
255248
});
256249

257-
const userRoles = ['admins', 'users', 'guests']; // order matters
258-
const filters = MethodFilters.init({ userRoles, templateOptions: { userId: 99 } }).getFilters([
259-
usersFilter,
260-
extendFilter,
261-
]);
250+
const filters = MethodFilters.init({
251+
userRoles: allUserRolesMock,
252+
templateOptions: {
253+
userId: 99,
254+
},
255+
}).getFilters([usersFilter, extendFilter]);
262256

263257
expect(filters).to.deep.equal({
264258
methodOptions: {
@@ -279,4 +273,32 @@ describe('services/method-filters', () => {
279273
},
280274
});
281275
});
276+
277+
it('should correctly collect allow distinct in query for method', () => {
278+
const allowDistinctInQueryFilter = methodFiltersRepo.create({
279+
roleAlias: 'admins',
280+
operator: FilterOperator.and,
281+
filter: {
282+
condition: {
283+
methodOptions: { isAllowDistinct: true },
284+
options: { isDisableAttributes: false },
285+
},
286+
},
287+
});
288+
289+
const filters = MethodFilters.init({
290+
userRoles: allUserRolesMock,
291+
templateOptions: {
292+
userId: 99,
293+
},
294+
}).getFilters([allowDistinctInQueryFilter]);
295+
296+
expect(filters).to.deep.equal({
297+
methodOptions: {
298+
isAllowDistinct: true,
299+
},
300+
options: { isDisableAttributes: false },
301+
query: {},
302+
});
303+
});
282304
});

microservices/authorization/migrations/permissions/list/filters.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,17 @@
6868
"admin": "stop"
6969
},
7070
"createdAt": "2022-03-15T06:15:40.656Z"
71+
},
72+
{
73+
"title": "Allow distinct in query",
74+
"condition": {
75+
"methodOptions": {
76+
"isAllowDistinct": true
77+
},
78+
"options": {
79+
"isDisableAttributes": false
80+
}
81+
},
82+
"createdAt": "2022-03-15T06:15:14.739Z"
7183
}
7284
]

microservices/authorization/migrations/permissions/list/methods/authentication.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,13 @@
157157
"createdAt": "2023-12-01T11:41:51.921Z",
158158
"modelIn": "CountRequestParams",
159159
"modelOut": "CountOutputParams",
160-
"methodFilters": []
160+
"methodFilters": [
161+
{
162+
"filterTitle": "Allow distinct in query",
163+
"operator": "and",
164+
"roleAlias": "admin",
165+
"createdAt": "2022-03-15T06:18:07.204Z"
166+
}
167+
]
161168
}
162169
]

microservices/authorization/migrations/permissions/list/models/common.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@
1414
"admin": "allow"
1515
}
1616
},
17+
"payload": {
18+
"in": {
19+
"admin": "allow"
20+
},
21+
"out": {
22+
"admin": "allow"
23+
}
24+
},
1725
"hasRemoved": {
1826
"in": {
1927
"admin": "allow"

0 commit comments

Comments
 (0)