From 4ddfec0403fa97b97b2c1fa90a916b934aef4a52 Mon Sep 17 00:00:00 2001 From: Sabir Hassan Date: Sun, 26 Jun 2022 01:48:31 +0500 Subject: [PATCH] chore: add isAdmin field in user response --- api/public/swagger.yaml | 31 +++++++--------------------- api/src/controllers/group.ts | 2 +- api/src/controllers/permission.ts | 28 +++++++++++++++++++------ api/src/controllers/session.ts | 8 ++----- api/src/controllers/user.ts | 9 +++++--- api/src/routes/api/spec/user.spec.ts | 12 +++++++---- 6 files changed, 47 insertions(+), 43 deletions(-) diff --git a/api/public/swagger.yaml b/api/public/swagger.yaml index 9c78804..237b77e 100644 --- a/api/public/swagger.yaml +++ b/api/public/swagger.yaml @@ -314,10 +314,13 @@ components: type: string displayName: type: string + isAdmin: + type: boolean required: - id - username - displayName + - isAdmin type: object additionalProperties: false GroupResponse: @@ -535,24 +538,6 @@ components: - setting type: object additionalProperties: false - SessionResponse: - properties: - id: - type: number - format: double - username: - type: string - displayName: - type: string - isAdmin: - type: boolean - required: - - id - - username - - displayName - - isAdmin - type: object - additionalProperties: false ExecuteReturnJsonPayload: properties: _program: @@ -1066,7 +1051,7 @@ paths: type: array examples: 'Example 1': - value: [{id: 123, username: johnusername, displayName: John}, {id: 456, username: starkusername, displayName: Stark}] + value: [{id: 123, username: johnusername, displayName: John, isAdmin: false}, {id: 456, username: starkusername, displayName: Stark, isAdmin: true}] summary: 'Get list of all users (username, displayname). All users can request this.' tags: - User @@ -1509,7 +1494,7 @@ paths: type: array examples: 'Example 1': - value: [{permissionId: 123, uri: /SASjsApi/code/execute, setting: Grant, user: {id: 1, username: johnSnow01, displayName: 'John Snow'}}, {permissionId: 124, uri: /SASjsApi/code/execute, setting: Grant, group: {groupId: 1, name: DCGroup, description: 'This group represents Data Controller Users'}}] + value: [{permissionId: 123, uri: /SASjsApi/code/execute, setting: Grant, user: {id: 1, username: johnSnow01, displayName: 'John Snow', isAdmin: false}}, {permissionId: 124, uri: /SASjsApi/code/execute, setting: Grant, group: {groupId: 1, name: DCGroup, description: 'This group represents Data Controller Users'}}] summary: 'Get list of all permissions (uri, setting and userDetail).' tags: - Permission @@ -1528,7 +1513,7 @@ paths: $ref: '#/components/schemas/PermissionDetailsResponse' examples: 'Example 1': - value: {permissionId: 123, uri: /SASjsApi/code/execute, setting: Grant, user: {id: 1, username: johnSnow01, displayName: 'John Snow'}} + value: {permissionId: 123, uri: /SASjsApi/code/execute, setting: Grant, user: {id: 1, username: johnSnow01, displayName: 'John Snow', isAdmin: false}} summary: 'Create a new permission. Admin only.' tags: - Permission @@ -1554,7 +1539,7 @@ paths: $ref: '#/components/schemas/PermissionDetailsResponse' examples: 'Example 1': - value: {permissionId: 123, uri: /SASjsApi/code/execute, setting: Grant, user: {id: 1, username: johnSnow01, displayName: 'John Snow'}} + value: {permissionId: 123, uri: /SASjsApi/code/execute, setting: Grant, user: {id: 1, username: johnSnow01, displayName: 'John Snow', isAdmin: false}} summary: 'Update permission setting. Admin only' tags: - Permission @@ -1607,7 +1592,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SessionResponse' + $ref: '#/components/schemas/UserResponse' examples: 'Example 1': value: {id: 123, username: johnusername, displayName: John, isAdmin: false} diff --git a/api/src/controllers/group.ts b/api/src/controllers/group.ts index 3a6ff66..1d324ef 100644 --- a/api/src/controllers/group.ts +++ b/api/src/controllers/group.ts @@ -198,7 +198,7 @@ const getGroup = async (findBy: GetGroupBy): Promise => { 'groupId name description isActive users -_id' ).populate( 'users', - 'id username displayName -_id' + 'id username displayName isAdmin -_id' )) as unknown as GroupDetailsResponse if (!group) throw { diff --git a/api/src/controllers/permission.ts b/api/src/controllers/permission.ts index f8e3422..608df5b 100644 --- a/api/src/controllers/permission.ts +++ b/api/src/controllers/permission.ts @@ -69,7 +69,12 @@ export class PermissionController { permissionId: 123, uri: '/SASjsApi/code/execute', setting: 'Grant', - user: { id: 1, username: 'johnSnow01', displayName: 'John Snow' } + user: { + id: 1, + username: 'johnSnow01', + displayName: 'John Snow', + isAdmin: false + } }, { permissionId: 124, @@ -95,7 +100,12 @@ export class PermissionController { permissionId: 123, uri: '/SASjsApi/code/execute', setting: 'Grant', - user: { id: 1, username: 'johnSnow01', displayName: 'John Snow' } + user: { + id: 1, + username: 'johnSnow01', + displayName: 'John Snow', + isAdmin: false + } }) @Post('/') public async createPermission( @@ -113,7 +123,12 @@ export class PermissionController { permissionId: 123, uri: '/SASjsApi/code/execute', setting: 'Grant', - user: { id: 1, username: 'johnSnow01', displayName: 'John Snow' } + user: { + id: 1, + username: 'johnSnow01', + displayName: 'John Snow', + isAdmin: false + } }) @Patch('{permissionId}') public async updatePermission( @@ -142,7 +157,7 @@ const getAllPermissions = async (): Promise => uri: 1, setting: 1 }) - .populate({ path: 'user', select: 'id username displayName -_id' }) + .populate({ path: 'user', select: 'id username displayName isAdmin -_id' }) .populate({ path: 'group', select: 'groupId name description -_id' @@ -183,7 +198,8 @@ const createPermission = async ({ user = { id: userInDB.id, username: userInDB.username, - displayName: userInDB.displayName + displayName: userInDB.displayName, + isAdmin: userInDB.isAdmin } break } @@ -241,7 +257,7 @@ const updatePermission = async ( uri: 1, setting: 1 }) - .populate({ path: 'user', select: 'id username displayName -_id' }) + .populate({ path: 'user', select: 'id username displayName isAdmin -_id' }) .populate({ path: 'group', select: 'groupId name description -_id' diff --git a/api/src/controllers/session.ts b/api/src/controllers/session.ts index bf53758..0571529 100644 --- a/api/src/controllers/session.ts +++ b/api/src/controllers/session.ts @@ -2,10 +2,6 @@ import express from 'express' import { Request, Security, Route, Tags, Example, Get } from 'tsoa' import { UserResponse } from './user' -interface SessionResponse extends UserResponse { - isAdmin: boolean -} - @Security('bearerAuth') @Route('SASjsApi/session') @Tags('Session') @@ -14,7 +10,7 @@ export class SessionController { * @summary Get session info (username). * */ - @Example({ + @Example({ id: 123, username: 'johnusername', displayName: 'John', @@ -23,7 +19,7 @@ export class SessionController { @Get('/') public async session( @Request() request: express.Request - ): Promise { + ): Promise { return session(request) } } diff --git a/api/src/controllers/user.ts b/api/src/controllers/user.ts index 1e72de6..f410853 100644 --- a/api/src/controllers/user.ts +++ b/api/src/controllers/user.ts @@ -24,6 +24,7 @@ export interface UserResponse { id: number username: string displayName: string + isAdmin: boolean } export interface UserDetailsResponse { @@ -48,12 +49,14 @@ export class UserController { { id: 123, username: 'johnusername', - displayName: 'John' + displayName: 'John', + isAdmin: false }, { id: 456, username: 'starkusername', - displayName: 'Stark' + displayName: 'Stark', + isAdmin: true } ]) @Get('/') @@ -200,7 +203,7 @@ export class UserController { const getAllUsers = async (): Promise => await User.find({}) - .select({ _id: 0, id: 1, username: 1, displayName: 1 }) + .select({ _id: 0, id: 1, username: 1, displayName: 1, isAdmin: 1 }) .exec() const createUser = async (data: UserPayload): Promise => { diff --git a/api/src/routes/api/spec/user.spec.ts b/api/src/routes/api/spec/user.spec.ts index 1c4fd99..12e68d5 100644 --- a/api/src/routes/api/spec/user.spec.ts +++ b/api/src/routes/api/spec/user.spec.ts @@ -770,12 +770,14 @@ describe('user', () => { { id: expect.anything(), username: adminUser.username, - displayName: adminUser.displayName + displayName: adminUser.displayName, + isAdmin: adminUser.isAdmin }, { id: expect.anything(), username: user.username, - displayName: user.displayName + displayName: user.displayName, + isAdmin: user.isAdmin } ]) }) @@ -796,12 +798,14 @@ describe('user', () => { { id: expect.anything(), username: adminUser.username, - displayName: adminUser.displayName + displayName: adminUser.displayName, + isAdmin: adminUser.isAdmin }, { id: expect.anything(), username: 'randomUser', - displayName: user.displayName + displayName: user.displayName, + isAdmin: user.isAdmin } ]) })