Skip to content

Commit 6970e24

Browse files
committed
fix organization restrictions
1 parent 17ca35a commit 6970e24

File tree

8 files changed

+47
-24
lines changed

8 files changed

+47
-24
lines changed

server/hooks/restrictReviewAndEnableChange.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,23 @@ module.exports = function restrictReviewAndEnableChange () { // eslint-disable-l
99

1010
const role = getByDot(hook, 'params.user.role');
1111
const isModOrAdmin = role && ['admin', 'moderator'].includes(role);
12-
const isReviewed = getByDot(hook, 'params.before.isReviewed');
12+
const isReviewed = getByDot(hook, 'params.before.reviewedBy');
1313
const userId = getByDot(hook, 'params.user._id');
14-
const isOwner = userId && getByDot(hook, 'params.before.userId');
14+
const ownerId = getByDot(hook, 'params.before.userId');
15+
const isOwner = userId && ownerId && ownerId.toString() === userId.toString();
1516

1617
// only allow mods and admins to change the review status
1718
if (!isModOrAdmin) {
1819
deleteByDot(hook.data, 'isReviewed');
1920
}
2021

22+
// set reviewedBy to current user if the user has mod rights
23+
// and wants to confirm the review status
24+
deleteByDot(hook.data, 'reviewedBy');
25+
if (hook.data.isReviewed) {
26+
hook.data.reviewedBy = userId;
27+
}
28+
2129
// only allow changes to mods, admin and owners (if its already reviewed)
2230
if (!isModOrAdmin && (!isOwner || (isOwner && !isReviewed))) {
2331
deleteByDot(hook.data, 'isEnabled');

server/hooks/restrictToOwnerOrModerator.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ module.exports = function restrictToOwnerOrModerator (query = {}) { // eslint-di
1919
const isModOrAdmin = role && ['admin', 'moderator'].includes(role);
2020

2121
const userId = getByDot(hook, 'params.user._id');
22-
const isOwner = userId && getByDot(hook, 'params.before.userId');
22+
const ownerId = getByDot(hook, 'params.before.userId');
23+
const isOwner = userId && ownerId && ownerId.toString() === userId.toString();
2324

2425
// allow for mods or admins
2526
if (isModOrAdmin) {
@@ -28,11 +29,14 @@ module.exports = function restrictToOwnerOrModerator (query = {}) { // eslint-di
2829

2930
// change the query if the method is find or get
3031
if (isFindOrGet) {
31-
// add given query on top of it
32-
hook.data = Object.assign(hook.data, query);
33-
// if not an mod or admin, restrict to owner
34-
hook.data.userId = userId;
35-
32+
// restrict to owner or given query
33+
const restrictedQuery = {
34+
$or: [
35+
{ userId },
36+
{ ...query }
37+
]
38+
};
39+
hook.params.query = Object.assign(hook.params.query, restrictedQuery);
3640
return hook;
3741
}
3842

server/models/organizations.model.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@ module.exports = function (app) {
3030
type: Boolean,
3131
default: false
3232
},
33-
isReviewed: {
34-
type: Boolean,
35-
default: false
36-
},
33+
reviewedBy: { type: String },
3734
deleted: {
3835
type: Boolean,
3936
default: false

server/seeder/development/organizations.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ module.exports = (seederstore) => {
1818
addresses: () => seedHelpers.randomAddresses(),
1919
type: () => seedHelpers.randomItem(['ngo', 'npo', 'goodpurpose', 'ev', 'eva']),
2020
description: '{{lorem.text}}',
21-
isVerified: () => seedHelpers.randomItem([true, false]),
2221
deletedAt: null,
2322
isEnabled: true,
24-
isReviewed: true,
23+
reviewedBy: null,
2524
createdAt: '{{date.recent}}',
2625
updatedAt: '{{date.recent}}',
2726
wasSeeded: true

server/seeder/development/users-admin.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@ module.exports = (seederstore) => {
3535
doiToken: null,
3636
confirmedAt: null,
3737
deletedAt: null
38+
},
39+
{
40+
41+
password: '1234',
42+
name: 'Sepp',
43+
slug: 'sepp',
44+
isnothere: true,
45+
timezone: 'Europe/Berlin',
46+
avatar: '{{internet.avatar}}',
47+
coverImg: 'https://source.unsplash.com/random/1250x280',
48+
role: 'user',
49+
badgeIds: () => [keys(seederstore.badges)[1]],
50+
doiToken: null,
51+
confirmedAt: null,
52+
deletedAt: null
3853
}]
3954
}]
4055
};

server/services/organizations/organizations.hooks.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ module.exports = {
3434
xss({ fields: xssFields })
3535
],
3636
find: [
37-
restrictToOwnerOrModerator({ isEnabled: true, isReviewed: true })
37+
restrictToOwnerOrModerator({ isEnabled: true, reviewedBy: { $ne: null } })
3838
],
3939
get: [
40-
restrictToOwnerOrModerator({ isEnabled: true, isReviewed: true })
40+
restrictToOwnerOrModerator({ isEnabled: true, reviewedBy: { $ne: null } })
4141
],
4242
create: [
4343
authenticate('jwt'),
@@ -47,7 +47,7 @@ module.exports = {
4747
),
4848
when(isModerator(),
4949
hook => {
50-
hook.data.isReviewed = true;
50+
hook.data.reviewedBy = hook.params.user.userId;
5151
return hook;
5252
}
5353
),

server/services/users/users.hooks.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ module.exports = {
100100
}
101101
),
102102
when(isProvider('external'),
103-
restrictUserRole()
103+
restrictUserRole(),
104+
createAdmin()
104105
),
105-
createAdmin(),
106106
saveRemoteImages(['avatar', 'coverImg'])
107107
],
108108
update: [

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,14 +1271,14 @@ dom-serializer@~0.0.0:
12711271
domelementtype "~1.1.1"
12721272
entities "~1.1.1"
12731273

1274-
domelementtype@1, domelementtype@~1.1.1:
1275-
version "1.1.3"
1276-
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
1277-
1278-
domelementtype@^1.3.0:
1274+
domelementtype@1, domelementtype@^1.3.0:
12791275
version "1.3.0"
12801276
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
12811277

1278+
domelementtype@~1.1.1:
1279+
version "1.1.3"
1280+
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
1281+
12821282
[email protected], domhandler@^2.3.0:
12831283
version "2.3.0"
12841284
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"

0 commit comments

Comments
 (0)