Skip to content

Commit 3c9e333

Browse files
committed
Admin can see every course staff
1 parent dc8a3bf commit 3c9e333

File tree

9 files changed

+25
-15
lines changed

9 files changed

+25
-15
lines changed

src/client/components/NavBar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const NavBar: React.FunctionComponent<Props> = () => {
4242
</RouterLink>
4343
</Box>
4444
<Spacer />
45-
{user && (user.isAdmin || user.courseStaff.length > 0) && (
45+
{user && (user.isAdmin || user.getCourseStaff.length > 0) && (
4646
<Menu>
4747
<MenuButton
4848
as={NavBarMenuButton}
@@ -56,7 +56,7 @@ export const NavBar: React.FunctionComponent<Props> = () => {
5656
<RouterLink to="/rooms">Rooms</RouterLink>
5757
</MenuItem>
5858
{(user.isAdmin ||
59-
user.courseStaff.filter(
59+
user.getCourseStaff.filter(
6060
(courseStaff) =>
6161
courseStaff.role ===
6262
StaffRole.Coordinator

src/client/components/helpers/SecretRoute.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ export const SecretRoute: React.FC<Props> = ({
1515
if (user.isAdmin) {
1616
return <Route {...props} />;
1717
}
18-
if (user.courseStaff.length === 0) {
18+
if (user.getCourseStaff.length === 0) {
1919
return <Redirect to="/permission-denied" />;
2020
}
2121
if (
22-
user.courseStaff.filter((courseStaff) =>
22+
user.getCourseStaff.filter((courseStaff) =>
2323
allowedRoles.includes(courseStaff.role)
2424
).length === 0
2525
) {

src/client/components/student-enrolment/DataValidator.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ export const DataValidator: React.FC<Props> = ({ data, setHasError }) => {
1616
return;
1717
}
1818
if (!data[0].includes("STUDENT_CODE")) {
19-
setErrors((prev) => prev.push("Column \"STUDENT_CODE\" not found"));
19+
setErrors((prev) => prev.push('Column "STUDENT_CODE" not found'));
2020
}
2121
if (!data[0].includes("ACTIVITY_GROUP_CODE")) {
2222
setErrors((prev) =>
23-
prev.push("Column \"ACTIVITY_GROUP_CODE\" not found")
23+
prev.push('Column "ACTIVITY_GROUP_CODE" not found')
2424
);
2525
}
2626
if (!data[0].includes("ACTIVITY_CODE")) {
27-
setErrors((prev) => prev.push("Column \"ACTIVITY_CODE\" not found"));
27+
setErrors((prev) => prev.push('Column "ACTIVITY_CODE" not found'));
2828
}
2929
const studentIndex = data[0].indexOf("STUDENT_CODE");
3030
const activityGroupIndex = data[0].indexOf("ACTIVITY_GROUP_CODE");

src/client/containers/CoursePageContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ export const CoursePageContainer: React.FC<Props> = () => {
191191
if (user.isAdmin) {
192192
return true;
193193
}
194-
return user.courseStaff.some(
194+
return user.getCourseStaff.some(
195195
(courseStaff) => courseStaff.course.code === courseCode
196196
);
197197
}, [user, courseCode]);

src/client/containers/CourseSelectContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const CourseSelectContainer: React.FC<Props> = ({
4242
);
4343
} else {
4444
setAvailCourses(
45-
user.courseStaff
45+
user.getCourseStaff
4646
.filter((courseStaff) =>
4747
allowedRoles.includes(courseStaff.role)
4848
)

src/client/containers/RoomPageContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ export const RoomPageContainer: React.FC<Props> = () => {
145145
// eslint-disable-next-line react-hooks/exhaustive-deps
146146
}, [addRoomMutationData]);
147147
useEffect(() => {
148-
user.courseStaff.forEach((courseStaff) => {
148+
user.getCourseStaff.forEach((courseStaff) => {
149149
setCourses((prev) =>
150150
prev.set(
151151
courseStaff.course.id,

src/client/generated/graphql.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export type User = {
7676
questions: Array<Question>;
7777
claimedQuestions: Array<Question>;
7878
courseMetas: Array<CourseUserMeta>;
79+
getCourseStaff: Array<CourseStaff>;
7980
};
8081

8182
export type Question = {
@@ -357,7 +358,7 @@ export type MeQuery = { __typename?: "Query" } & {
357358
User,
358359
"id" | "username" | "name" | "isAdmin"
359360
> & {
360-
courseStaff: Array<
361+
getCourseStaff: Array<
361362
{ __typename?: "CourseStaff" } & Pick<CourseStaff, "role"> & {
362363
course: { __typename?: "Course" } & Pick<
363364
Course,
@@ -895,7 +896,7 @@ export const MeDocument = gql`
895896
username
896897
name
897898
isAdmin
898-
courseStaff {
899+
getCourseStaff {
899900
course {
900901
id
901902
code

src/client/graphql/me.graphql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ query Me {
44
username
55
name
66
isAdmin
7-
courseStaff {
7+
getCourseStaff {
88
course {
99
id
1010
code

src/server/resolvers/user-resolver.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
import { Ctx, Query, Resolver } from "type-graphql";
1+
import { Ctx, FieldResolver, Query, Resolver } from "type-graphql";
22
import { User } from "../entities";
33
import { MyContext } from "../types/context";
4+
import { CourseStaff } from "../entities/course-staff";
45

5-
@Resolver()
6+
@Resolver(() => User)
67
export class UserResolver {
78
@Query(() => User)
89
async me(@Ctx() { req }: MyContext): Promise<User> {
910
return req.user;
1011
}
12+
13+
@FieldResolver(() => [CourseStaff])
14+
async getCourseStaff(@Ctx() { req }: MyContext): Promise<CourseStaff[]> {
15+
if (req.user.isAdmin) {
16+
return await CourseStaff.find();
17+
}
18+
return await req.user.courseStaff;
19+
}
1120
}

0 commit comments

Comments
 (0)