diff --git a/api/src/controllers/session.ts b/api/src/controllers/session.ts index 0a3562a..bf53758 100644 --- a/api/src/controllers/session.ts +++ b/api/src/controllers/session.ts @@ -2,6 +2,10 @@ 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') @@ -10,15 +14,16 @@ export class SessionController { * @summary Get session info (username). * */ - @Example({ + @Example({ id: 123, username: 'johnusername', - displayName: 'John' + displayName: 'John', + isAdmin: false }) @Get('/') public async session( @Request() request: express.Request - ): Promise { + ): Promise { return session(request) } } @@ -26,5 +31,6 @@ export class SessionController { const session = (req: express.Request) => ({ id: req.user!.userId, username: req.user!.username, - displayName: req.user!.displayName + displayName: req.user!.displayName, + isAdmin: req.user!.isAdmin }) diff --git a/api/src/controllers/web.ts b/api/src/controllers/web.ts index 7cef99d..ada7550 100644 --- a/api/src/controllers/web.ts +++ b/api/src/controllers/web.ts @@ -99,7 +99,8 @@ const login = async ( user: { id: user.id, username: user.username, - displayName: user.displayName + displayName: user.displayName, + isAdmin: user.isAdmin } } } diff --git a/api/src/routes/api/spec/web.spec.ts b/api/src/routes/api/spec/web.spec.ts index 4f8ec30..45b07f1 100644 --- a/api/src/routes/api/spec/web.spec.ts +++ b/api/src/routes/api/spec/web.spec.ts @@ -79,7 +79,8 @@ describe('web', () => { expect(res.body.user).toEqual({ id: expect.any(Number), username: user.username, - displayName: user.displayName + displayName: user.displayName, + isAdmin: user.isAdmin }) }) }) diff --git a/web/src/components/login.tsx b/web/src/components/login.tsx index a60baa7..706a714 100644 --- a/web/src/components/login.tsx +++ b/web/src/components/login.tsx @@ -30,6 +30,7 @@ const Login = () => { appContext.setUserId?.(user.id) appContext.setUsername?.(user.username) appContext.setDisplayName?.(user.displayName) + appContext.setIsAdmin?.(user.isAdmin) appContext.setLoggedIn?.(loggedIn) } } diff --git a/web/src/context/appContext.tsx b/web/src/context/appContext.tsx index a91d8e3..4802a57 100644 --- a/web/src/context/appContext.tsx +++ b/web/src/context/appContext.tsx @@ -29,6 +29,8 @@ interface AppContextProps { setUsername: Dispatch> | null displayName: string setDisplayName: Dispatch> | null + isAdmin: boolean + setIsAdmin: Dispatch> | null mode: ModeType runTimes: RunTimeType[] logout: (() => void) | null @@ -44,6 +46,8 @@ export const AppContext = createContext({ setUsername: null, displayName: '', setDisplayName: null, + isAdmin: false, + setIsAdmin: null, mode: ModeType.Server, runTimes: [], logout: null @@ -56,6 +60,7 @@ const AppContextProvider = (props: { children: ReactNode }) => { const [userId, setUserId] = useState(0) const [username, setUsername] = useState('') const [displayName, setDisplayName] = useState('') + const [isAdmin, setIsAdmin] = useState(false) const [mode, setMode] = useState(ModeType.Server) const [runTimes, setRunTimes] = useState([]) @@ -70,6 +75,7 @@ const AppContextProvider = (props: { children: ReactNode }) => { setUserId(data.id) setUsername(data.username) setDisplayName(data.displayName) + setIsAdmin(data.isAdmin) setLoggedIn(true) }) .catch(() => { @@ -107,6 +113,8 @@ const AppContextProvider = (props: { children: ReactNode }) => { setUsername, displayName, setDisplayName, + isAdmin, + setIsAdmin, mode, runTimes, logout