Skip to content

Commit 073bcd5

Browse files
committed
Allow unxUsers to override createdBy...
1 parent 698b567 commit 073bcd5

File tree

4 files changed

+44
-22
lines changed

4 files changed

+44
-22
lines changed

sci-log-db/src/__tests__/acceptance/basesnippet.controller.acceptance.ts

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ describe('Basesnippet', function (this: Suite) {
6767
expect(result.body.updateACL).to.be.eql(['basesnippetAcceptance']),
6868
expect(result.body.deleteACL).to.be.eql(['basesnippetAcceptance']),
6969
expect(result.body.adminACL).to.be.eql(['admin']),
70+
expect(result.body.createdBy).to.be.eql('[email protected]'),
7071
(baseSnippetId = result.body.id)
7172
),
7273
)

sci-log-db/src/__tests__/acceptance/logbook.controller.acceptance.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,18 @@ describe('Logbook', function (this: Suite) {
432432
});
433433

434434
it('post a logbook with authentication and should create default ACLS from parent', async () => {
435+
const unxUser = {
436+
437+
firstName: 'ExampleUnx',
438+
lastName: 'UserUnx',
439+
roles: ['any-authenticated-user', 'aUnxGroup'],
440+
};
441+
const unxToken = await createUserToken(
442+
app,
443+
client,
444+
['logbookAcceptance'],
445+
unxUser,
446+
);
435447
const locationSnippet = {
436448
isPrivate: true,
437449
defaultOrder: 0,
@@ -451,12 +463,14 @@ describe('Logbook', function (this: Suite) {
451463

452464
await client
453465
.post('/logbooks')
454-
.set('Authorization', 'Bearer ' + token)
466+
.set('Authorization', 'Bearer ' + unxToken)
455467
.set('Content-Type', 'application/json')
456468
.send({
457-
..._.omit(logbookSnippet, 'location'),
469+
...logbookSnippet,
458470
accessGroups: ['anAccessGroups'],
459471
location: locationResponse.body.id,
472+
createdBy: '[email protected]',
473+
createdAt: '1999-10-10T14:04:19.522Z',
460474
})
461475
.expect(200)
462476
.then(
@@ -491,7 +505,9 @@ describe('Logbook', function (this: Suite) {
491505
adminUser.email,
492506
adminUser.unxGroup,
493507
]),
494-
expect(result.body.adminACL).to.be.eql(['admin', adminUser.unxGroup])
508+
expect(result.body.adminACL).to.be.eql(['admin', adminUser.unxGroup]),
509+
expect(result.body.createdBy).to.be.eql('[email protected]'),
510+
expect(result.body.createdAt).to.be.eql('1999-10-10T14:04:19.522Z')
495511
),
496512
)
497513
.catch(err => {

sci-log-db/src/__tests__/acceptance/test-helper.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ export async function createUserToken(
9393
app: SciLogDbApplication,
9494
client: Client,
9595
additionalRoles: string[] = [],
96+
userD = userData,
9697
) {
97-
const user = await createAUser(app, additionalRoles);
98+
const user = await createAUser(app, additionalRoles, userD);
9899
const token = await createToken(client, user);
99100
return token;
100101
}

sci-log-db/src/repositories/autoadd.repository.base.ts

+22-18
Original file line numberDiff line numberDiff line change
@@ -330,23 +330,28 @@ export class AutoAddRepository<
330330
ctx.instance.defaultOrder =
331331
ctx.instance.defaultOrder ?? Date.now() * 1000;
332332
// only admin may override createdAt/updateAt etc fields
333-
if (currentUser.roles.includes('admin')) {
334-
ctx.instance.createdAt = ctx.instance.createdAt ?? new Date();
335-
ctx.instance.createdBy =
336-
ctx.instance.createdBy ??
337-
currentUser?.email ??
338-
339-
ctx.instance.updatedAt = ctx.instance.updatedAt ?? new Date();
340-
ctx.instance.updatedBy =
341-
ctx.instance.updatedBy ??
342-
currentUser?.email ??
343-
344-
} else {
345-
ctx.instance.createdAt = new Date();
346-
ctx.instance.createdBy = currentUser?.email ?? '[email protected]';
347-
ctx.instance.updatedAt = new Date();
348-
ctx.instance.updatedBy = currentUser?.email ?? '[email protected]';
349-
}
333+
ctx.instance.createdAt = ctx.instance.createdAt ?? new Date();
334+
ctx.instance.createdBy =
335+
ctx.instance.createdBy ??
336+
currentUser?.email ??
337+
338+
ctx.instance.updatedAt = ctx.instance.updatedAt ?? new Date();
339+
ctx.instance.updatedBy =
340+
ctx.instance.updatedBy ??
341+
currentUser?.email ??
342+
343+
await this.aclDefaultOnCreation(ctx.instance);
344+
if (
345+
currentUser.roles.some(
346+
(role: string) =>
347+
role === 'admin' || ctx.instance.adminACL?.includes(role),
348+
)
349+
)
350+
return;
351+
ctx.instance.createdAt = new Date();
352+
ctx.instance.createdBy = currentUser?.email ?? '[email protected]';
353+
ctx.instance.updatedAt = new Date();
354+
ctx.instance.updatedBy = currentUser?.email ?? '[email protected]';
350355

351356
if (typeof ctx.instance.expiresAt == 'undefined') {
352357
// default expiration time is 3 days
@@ -355,7 +360,6 @@ export class AutoAddRepository<
355360
ctx.instance.expiresAt.getDate() + 3,
356361
);
357362
}
358-
await this.aclDefaultOnCreation(ctx.instance);
359363
if (
360364
ctx.instance.snippetType === 'logbook' &&
361365
ctx.instance.readACL?.includes('any-authenticated-user')

0 commit comments

Comments
 (0)