Skip to content

Commit

Permalink
[Teachers] Move access checking to access utils
Browse files Browse the repository at this point in the history
  • Loading branch information
rikurauhala committed Feb 21, 2025
1 parent a84ad67 commit a632f37
Show file tree
Hide file tree
Showing 8 changed files with 16 additions and 16 deletions.
3 changes: 1 addition & 2 deletions services/frontend/src/components/Routes/ProtectedRoute.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { Outlet, useLocation } from 'react-router'

import { hasFullAccessToTeacherData } from '@/components/Teachers/util'
import { useGetAuthorizedUserQuery } from '@/redux/auth'
import { Role } from '@/shared/types'
import { checkUserAccess } from '@/util/access'
import { checkUserAccess, hasFullAccessToTeacherData } from '@/util/access'
import { AccessDeniedMessage } from './AccessDeniedMessage'

interface ProtectedRouteProps {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ import { useGetProvidersQuery } from '@/redux/providers'
import { useGetSemestersQuery } from '@/redux/semesters'
import { useLazyGetTeacherStatisticsQuery } from '@/redux/teachers'
import { mapToProviders } from '@/shared/util'
import { getFullStudyProgrammeRights } from '@/util/access'
import { hasFullAccessToTeacherData } from '../util'
import { getFullStudyProgrammeRights, hasFullAccessToTeacherData } from '@/util/access'

export const TeacherStatistics = () => {
const { getTextIn } = useLanguage()
Expand Down
2 changes: 1 addition & 1 deletion services/frontend/src/components/Teachers/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import { Header, Segment, Tab } from 'semantic-ui-react'
import { useSemanticTabs } from '@/hooks/tabs'
import { useTitle } from '@/hooks/title'
import { useGetAuthorizedUserQuery } from '@/redux/auth'
import { hasFullAccessToTeacherData } from '@/util/access'
import { TeacherDetails } from './TeacherDetails'
import { TeacherLeaderBoard } from './TeacherLeaderBoard'
import { TeacherSearchTab } from './TeacherSearchTab'
import { TeacherStatistics } from './TeacherStatistics'
import { hasFullAccessToTeacherData } from './util'

const pane = (title, Content, icon) => ({
menuItem: { key: title, content: title, icon },
Expand Down
3 changes: 0 additions & 3 deletions services/frontend/src/components/Teachers/util.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ import { useState, useEffect } from 'react'
import { Link, useLocation } from 'react-router'

import { isDefaultServiceProvider } from '@/common'
import { hasFullAccessToTeacherData } from '@/components/Teachers/util'
import { useGetAuthorizedUserQuery } from '@/redux/auth'
import { checkUserAccess, getFullStudyProgrammeRights } from '@/util/access'
import { checkUserAccess, getFullStudyProgrammeRights, hasFullAccessToTeacherData } from '@/util/access'
import { NavigationButton } from './NavigationButton'
import { NavigationItem, navigationItems } from './navigationItems'
import { OodikoneLogo } from './OodikoneLogo'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { setProgrammes } from '@/redux/coursesSummaryForm'
import { ALL, getAllStudyProgrammes, getSummaryStatistics } from '@/selectors/courseStats'
import { AttemptData } from '@/types/attemptData'
import { DropdownOption } from '@/types/dropdownOption'
import { getFullStudyProgrammeRights, userHasAccessToAllCourseStats } from '@/util/access'
import { getFullStudyProgrammeRights, hasAccessToAllCourseStats } from '@/util/access'
import { AttemptsTable } from './AttemptsTable'
import { exportToExcel } from './export'

Expand All @@ -35,7 +35,7 @@ const unObjectifyProperty = ({ obj, property }: { obj: object; property: string
export const SummaryTab = ({ onClickCourse }: { onClickCourse: (courseCode: string) => void }) => {
const { roles, programmeRights } = useGetAuthorizedUserQuery()
const fullStudyProgrammeRights = getFullStudyProgrammeRights(programmeRights)
const userHasAccessToAllStats = userHasAccessToAllCourseStats(roles, fullStudyProgrammeRights)
const userHasAccessToAllStats = hasAccessToAllCourseStats(roles, fullStudyProgrammeRights)
const dispatch = useDispatch()
const programmes = useSelector((state: RootState) => getAllStudyProgrammes(state))
const form = useSelector((state: RootState) => state.courseSummaryForm)
Expand Down
4 changes: 2 additions & 2 deletions services/frontend/src/pages/CourseStatistics/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { useTitle } from '@/hooks/title'
import { RootState } from '@/redux'
import { useGetAuthorizedUserQuery } from '@/redux/auth'
import { getCourseStats } from '@/redux/courseStats'
import { checkUserAccess, getFullStudyProgrammeRights, userHasAccessToAllCourseStats } from '@/util/access'
import { checkUserAccess, getFullStudyProgrammeRights, hasAccessToAllCourseStats } from '@/util/access'
import { CourseTab } from './CourseTab'
import { FacultyStatisticsTab } from './FacultyStatisticsTab'
import { NewQueryButton } from './NewQueryButton'
Expand Down Expand Up @@ -63,7 +63,7 @@ export const CourseStatistics = () => {
}

const fullStudyProgrammeRights = getFullStudyProgrammeRights(programmeRights)
const userHasAccessToAllStats = userHasAccessToAllCourseStats(roles, fullStudyProgrammeRights)
const userHasAccessToAllStats = hasAccessToAllCourseStats(roles, fullStudyProgrammeRights)

if (!checkUserAccess(['courseStatistics', 'admin', 'fullSisuAccess'], roles) && fullStudyProgrammeRights.length < 1) {
return <AccessDeniedMessage />
Expand Down
10 changes: 8 additions & 2 deletions services/frontend/src/util/access.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ export const getFullStudyProgrammeRights = (programmeRights: DetailedProgrammeRi
if (programmeRights) {
return programmeRights.filter(({ limited }) => !limited).map(({ code }) => code)
}

return []
}

export const userHasAccessToAllCourseStats = (roles: Role[], studyProgrammeRights: string[]) => {
export const hasAccessToAllCourseStats = (roles: Role[], studyProgrammeRights: string[]) => {
return roles.some(role => ['admin', 'fullSisuAccess'].includes(role)) || studyProgrammeRights.length > 0
}

export const hasFullAccessToTeacherData = (roles: Role[], iamGroups: string[]) => {
return (
roles.some(role => role === 'admin') ||
iamGroups.some(iamGroup => ['hy-dekaanit', 'hy-varadekaanit-opetus'].includes(iamGroup))
)
}

0 comments on commit a632f37

Please sign in to comment.