Skip to content

Commit 34cd445

Browse files
committed
fix: users + groups permissions assign logic + text hints
1 parent 188d36e commit 34cd445

5 files changed

Lines changed: 27 additions & 27 deletions

File tree

client/components/admin/admin-groups-edit-permissions.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,28 +149,28 @@ export default {
149149
items: [
150150
{
151151
permission: 'write:users',
152-
hint: 'Can create or authorize new users, but not modify existing ones',
152+
hint: 'Can create or authorize new users, but not modify existing ones. Can only assign to non-administrative groups',
153153
warning: false,
154154
restrictedForSystem: true,
155155
disabled: false
156156
},
157157
{
158158
permission: 'manage:users',
159-
hint: 'Can manage all users (but not users with administrative permissions)',
159+
hint: 'Can create, authorize and modify ANY users. Can only assign to non-administrative groups',
160160
warning: false,
161161
restrictedForSystem: true,
162162
disabled: false
163163
},
164164
{
165165
permission: 'write:groups',
166-
hint: 'Can manage groups and assign CONTENT permissions / page rules',
166+
hint: 'Can manage groups and set CONTENT permissions / page rules. Can only assign users to non-administrative groups',
167167
warning: false,
168168
restrictedForSystem: true,
169169
disabled: false
170170
},
171171
{
172172
permission: 'manage:groups',
173-
hint: 'Can manage groups and assign ANY permissions (but not manage:system) / page rules',
173+
hint: 'Can manage groups and set ANY permissions (but not manage:system) / page rules. Can assign users to ANY groups (except groups with the manage:system permission)',
174174
warning: true,
175175
restrictedForSystem: true,
176176
disabled: false
@@ -203,7 +203,7 @@ export default {
203203
},
204204
{
205205
permission: 'manage:system',
206-
hint: 'Can manage and access everything. Root administrator.',
206+
hint: 'Can manage and access everything. Root administrator',
207207
warning: true,
208208
restrictedForSystem: true,
209209
disabled: true

server/core/auth.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -318,41 +318,41 @@ module.exports = {
318318
},
319319

320320
/**
321-
* Check if user can perform assignment to a group with elevated permissions
321+
* Check if user (requester) can perform user assignment to a group with elevated permissions
322322
*
323-
* @param {User} user
324-
* @param {Array<Number>} groupIds
323+
* @param {User} requester The user attempting to perform the assignment
324+
* @param {Array<Number>} groupIds List of group IDs to be assigned
325325
* @returns {Boolean}
326326
*/
327-
async checkAssignUserToGroupAccess(user, groupIds = []) {
327+
async checkAssignUserToGroupAccess(requester, groupIds = []) {
328328
if (!groupIds || groupIds.length < 1) {
329329
return true
330330
}
331331

332-
const userPermissions = user.permissions ? user.permissions : user.getGlobalPermissions()
332+
const requesterPermissions = requester.permissions ? requester.permissions : requester.getGlobalPermissions()
333333

334334
// System Admin
335-
if (userPermissions.includes('manage:system')) {
335+
if (requesterPermissions.includes('manage:system')) {
336336
return true
337337
}
338338

339339
// Ensure basic user management permission
340-
if (!userPermissions.some(p => ['write:users', 'manage:users', 'write:groups', 'manage:groups'].includes(p))) {
340+
if (!requesterPermissions.some(p => ['write:users', 'manage:users', 'write:groups', 'manage:groups'].includes(p))) {
341341
return false
342342
}
343343

344344
const groups = await WIKI.models.groups.query().whereIn('id', groupIds)
345-
return !groups.some(grp => {
346-
// Check for manage:system permission
347-
if (grp.permissions.includes('manage:system') && !userPermissions.includes('manage:groups')) {
345+
return groups.every(grp => {
346+
// Check group for manage:system permission
347+
if (grp.permissions.includes('manage:system')) {
348348
return false
349349
}
350350

351-
// Check for elevated permissions
351+
// Check group for administrative permissions
352352
if (grp.permissions.some(p => {
353353
const permType = _.last(p.split(':'))
354354
return ['users', 'groups', 'navigation', 'theme', 'api'].includes(permType)
355-
}) && !(userPermissions.includes('write:groups') || userPermissions.includes('manage:groups'))) {
355+
}) && !requesterPermissions.includes('manage:groups')) {
356356
return false
357357
}
358358

server/graph/resolvers/group.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ module.exports = {
4545
throw new gql.GraphQLError('Invalid Group ID')
4646
}
4747

48-
// Check assigned permissions for write:groups
48+
// Check assigned permissions for manage:users / write:groups
4949
if (
50-
WIKI.auth.checkExclusiveAccess(req.user, ['write:groups'], ['manage:groups', 'manage:system']) &&
50+
WIKI.auth.checkExclusiveAccess(req.user, ['manage:users', 'write:groups'], ['manage:groups', 'manage:system']) &&
5151
grp.permissions.some(p => {
5252
const resType = _.last(p.split(':'))
5353
return ['users', 'groups', 'navigation', 'theme', 'api', 'system'].includes(resType)
5454
})
5555
) {
56-
throw new gql.GraphQLError('You are not authorized to assign a user to this elevated group.')
56+
throw new gql.GraphQLError('You are not authorized to assign a user to this administrative group.')
5757
}
5858

5959
// Check assigned permissions for manage:groups
@@ -178,7 +178,7 @@ module.exports = {
178178
return ['users', 'groups', 'navigation', 'theme', 'api', 'system'].includes(resType)
179179
})
180180
) {
181-
throw new gql.GraphQLError('You are not authorized to manage this group or assign these permissions.')
181+
throw new gql.GraphQLError('You are not authorized to manage this group or assign these administrative permissions.')
182182
}
183183

184184
// Check assigned permissions for manage:groups

server/graph/resolvers/user.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ module.exports = {
6565
async create (obj, args, context) {
6666
try {
6767
if (!(await WIKI.auth.checkAssignUserToGroupAccess(context.req.user, args.groups))) {
68-
throw new Error('You are not authorized to assign a user to a group with elevated permissions.')
68+
throw new Error('You are not authorized to create a user with an assignment to an administrative group.')
6969
}
7070

7171
await WIKI.models.users.createNewUser(args)
@@ -101,13 +101,13 @@ module.exports = {
101101
async update (obj, args, context) {
102102
try {
103103
if (!(await WIKI.auth.checkAssignUserToGroupAccess(context.req.user, args.groups))) {
104-
throw new Error('You are not authorized to assign a user to a group with elevated permissions.')
104+
throw new Error('You are not authorized to modify / assign a user from / to an administrative group.')
105105
}
106106

107107
await WIKI.models.users.updateUser(args)
108108

109109
return {
110-
responseResult: graphHelper.generateSuccess('User created successfully')
110+
responseResult: graphHelper.generateSuccess('User updated successfully')
111111
}
112112
} catch (err) {
113113
return graphHelper.generateError(err)

server/graph/schemas/group.graphql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type GroupQuery {
1818
list(
1919
filter: String
2020
orderBy: String
21-
): [GroupMinimal] @auth(requires: ["write:groups", "manage:groups", "manage:system"])
21+
): [GroupMinimal] @auth(requires: ["write:users", "manage:users", "write:groups", "manage:groups", "manage:system"])
2222

2323
single(
2424
id: Int!
@@ -49,12 +49,12 @@ type GroupMutation {
4949
assignUser(
5050
groupId: Int!
5151
userId: Int!
52-
): DefaultResponse @auth(requires: ["write:groups", "manage:groups", "manage:system"])
52+
): DefaultResponse @auth(requires: ["manage:users", "write:groups", "manage:groups", "manage:system"])
5353

5454
unassignUser(
5555
groupId: Int!
5656
userId: Int!
57-
): DefaultResponse @auth(requires: ["write:groups", "manage:groups", "manage:system"])
57+
): DefaultResponse @auth(requires: ["manage:users", "write:groups", "manage:groups", "manage:system"])
5858
}
5959

6060
# -----------------------------------------------

0 commit comments

Comments
 (0)