[Access rights] Remove katselmusViewer

This access right only granted access to evaluation overview which has been removed
This commit is contained in:
Riku Rauhala
2024-11-27 13:56:35 +02:00
parent 218f774f5b
commit 2824ede5f2
4 changed files with 72 additions and 97 deletions
-7
View File
@@ -8,7 +8,6 @@ Roles are defined [here](../services/backend/src/config/roles.ts). Criteria for
- courseStatistics
- facultyStatistics
- fullSisuAccess
- katselmusViewer
- openUniSearch
- studyGuidanceGroups
- teachers
@@ -23,10 +22,6 @@ The roles `openUniSearch` and `studyGuidanceGroups` simply enable certain views
- Can see statistics of every course and year
### katselmusViewer
- Enables the _Evaluation overview_ view (deprecated)
### teachers
- By default, the role only allows seeing the statistics of course providers (study programmes) they have full rights to (see [Programmes](#programmes))
@@ -52,7 +47,6 @@ The roles `openUniSearch` and `studyGuidanceGroups` simply enable certain views
| Completed courses | ✅ | ✅ | ✅ |
| Close to graduation | | ✅ | ✅ |
| Open uni population | | ✅ | |
| Evaluation overview | | ✅ | |
| Courses | | ✅ | ✅ |
\* = anyone who can log in to Oodikone, check the [IAM groups](#iam-groups) section for more information
@@ -72,7 +66,6 @@ A user must be a member of either the `grp-oodikone-basic-users` or `grp-oodikon
| grp-oodikone-basic-users | courseStatistics |
| grp-oodikone-users | facultyStatistics |
| grp-toska | admin |
| grp-katselmus-\* | katselmusViewer |
| hy-ypa-opa-dojo | openUniSearch |
`grp-oodikone-basic-users`: basically the whole staff (hy-\*-allstaff)
-1
View File
@@ -3,7 +3,6 @@ export const roles = [
'courseStatistics',
'facultyStatistics',
'fullSisuAccess',
'katselmusViewer',
'openUniSearch',
'studyGuidanceGroups',
'teachers',
+71 -87
View File
@@ -43,35 +43,31 @@ interface GetStatsRequest extends Request {
}
}
router.get(
'/:id/basicstats',
auth.roles(['facultyStatistics', 'katselmusViewer']),
async (req: GetStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
if (!code) {
return res.status(422).end()
}
const { year_type: yearType, programme_filter: programmeFilter, special_groups: specialGroups } = req.query
const data = await getBasicStats(code, yearType, programmeFilter, specialGroups)
if (data) {
return res.json(data)
}
const programmes = await getDegreeProgrammesOfFaculty(code, programmeFilter === 'NEW_STUDY_PROGRAMMES')
if (!programmes.length) {
return res.status(422).end()
}
// TODO: The types could be handled better. Possible null value is causing issues with TS.
let updatedStats: any = await combineFacultyBasics(code, programmes, yearType, specialGroups)
if (updatedStats) {
updatedStats = await setBasicStats(updatedStats, yearType, programmeFilter, specialGroups)
}
return res.json(updatedStats)
router.get('/:id/basicstats', auth.roles(['facultyStatistics']), async (req: GetStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
if (!code) {
return res.status(422).end()
}
)
const { year_type: yearType, programme_filter: programmeFilter, special_groups: specialGroups } = req.query
const data = await getBasicStats(code, yearType, programmeFilter, specialGroups)
if (data) {
return res.json(data)
}
const programmes = await getDegreeProgrammesOfFaculty(code, programmeFilter === 'NEW_STUDY_PROGRAMMES')
if (!programmes.length) {
return res.status(422).end()
}
// TODO: The types could be handled better. Possible null value is causing issues with TS.
let updatedStats: any = await combineFacultyBasics(code, programmes, yearType, specialGroups)
if (updatedStats) {
updatedStats = await setBasicStats(updatedStats, yearType, programmeFilter, specialGroups)
}
return res.json(updatedStats)
})
interface GetCreditStatsRequest extends Request {
query: {
@@ -79,46 +75,38 @@ interface GetCreditStatsRequest extends Request {
}
}
router.get(
'/:id/creditstats',
auth.roles(['facultyStatistics', 'katselmusViewer']),
async (req: GetCreditStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
const { year_type: yearType } = req.query
const stats = await getFacultyCredits(code, yearType === 'ACADEMIC_YEAR')
return res.json(stats)
router.get('/:id/creditstats', auth.roles(['facultyStatistics']), async (req: GetCreditStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
const { year_type: yearType } = req.query
const stats = await getFacultyCredits(code, yearType === 'ACADEMIC_YEAR')
return res.json(stats)
})
router.get('/:id/thesisstats', auth.roles(['facultyStatistics']), async (req: GetStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
if (!code) {
return res.status(422).end()
}
)
router.get(
'/:id/thesisstats',
auth.roles(['facultyStatistics', 'katselmusViewer']),
async (req: GetStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
if (!code) {
return res.status(422).end()
}
const { year_type: yearType, programme_filter: programmeFilter, special_groups: specialGroups } = req.query
const data = await getThesisWritersStats(code, yearType, programmeFilter, specialGroups)
if (data) {
return res.json(data)
}
const programmes = await getDegreeProgrammesOfFaculty(code, programmeFilter === 'NEW_STUDY_PROGRAMMES')
if (!programmes.length) {
return res.status(422).end()
}
let updatedStats: any = await combineFacultyThesisWriters(code, programmes, yearType, specialGroups)
if (updatedStats) {
updatedStats = await setThesisWritersStats(updatedStats, yearType, programmeFilter, specialGroups)
}
return res.json(updatedStats)
const { year_type: yearType, programme_filter: programmeFilter, special_groups: specialGroups } = req.query
const data = await getThesisWritersStats(code, yearType, programmeFilter, specialGroups)
if (data) {
return res.json(data)
}
)
const programmes = await getDegreeProgrammesOfFaculty(code, programmeFilter === 'NEW_STUDY_PROGRAMMES')
if (!programmes.length) {
return res.status(422).end()
}
let updatedStats: any = await combineFacultyThesisWriters(code, programmes, yearType, specialGroups)
if (updatedStats) {
updatedStats = await setThesisWritersStats(updatedStats, yearType, programmeFilter, specialGroups)
}
return res.json(updatedStats)
})
interface GetGraduationStatsRequest extends Request {
query: {
@@ -128,7 +116,7 @@ interface GetGraduationStatsRequest extends Request {
router.get(
'/:id/graduationtimes',
auth.roles(['facultyStatistics', 'katselmusViewer']),
auth.roles(['facultyStatistics']),
async (req: GetGraduationStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
@@ -164,7 +152,7 @@ interface GetProgressStatsRequest extends Request {
router.get(
'/:id/progressstats',
auth.roles(['facultyStatistics', 'katselmusViewer']),
auth.roles(['facultyStatistics']),
async (req: GetProgressStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
@@ -195,7 +183,7 @@ interface GetStudentStatsRequest extends GetProgressStatsRequest {}
router.get(
'/:id/studentstats',
auth.roles(['facultyStatistics', 'katselmusViewer']),
auth.roles(['facultyStatistics']),
async (req: GetStudentStatsRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
@@ -231,7 +219,7 @@ interface GetUpdateBasicViewRequest extends Request {
router.get(
'/:id/update_basicview',
auth.roles(['facultyStatistics', 'katselmusViewer']),
auth.roles(['facultyStatistics']),
async (req: GetUpdateBasicViewRequest, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
@@ -250,24 +238,20 @@ router.get(
}
)
router.get(
'/:id/update_progressview',
auth.roles(['facultyStatistics', 'katselmusViewer']),
async (req: Request, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
if (!code) {
return res.status(422).end()
}
try {
const result = await updateFacultyProgressOverview(code)
return res.json(result)
} catch (error) {
const message = `Failed to update progress tab stats for faculty ${code}`
logger.error(message, { error })
return res.status(500).json({ error: message })
}
router.get('/:id/update_progressview', auth.roles(['facultyStatistics']), async (req: Request, res: Response) => {
const facultyId = req.params.id
const code = await getFacultyCodeById(facultyId)
if (!code) {
return res.status(422).end()
}
)
try {
const result = await updateFacultyProgressOverview(code)
return res.json(result)
} catch (error) {
const message = `Failed to update progress tab stats for faculty ${code}`
logger.error(message, { error })
return res.status(500).json({ error: message })
}
})
export default router
+1 -2
View File
@@ -150,7 +150,7 @@ const updateAccessGroups = async (
specialGroup: Record<string, boolean>,
sisId: string
) => {
const { jory, superAdmin, openUni, katselmusViewer, fullSisuAccess } = specialGroup
const { jory, superAdmin, openUni, fullSisuAccess } = specialGroup
const userFromDb = await User.findOne({ where: { username } })
if (!userFromDb) {
throw new Error(`User ${username} not found`)
@@ -166,7 +166,6 @@ const updateAccessGroups = async (
...(currentAccessGroups.includes('teachers') ? ['teachers'] : []),
...(superAdmin || currentAccessGroups.includes('admin') ? ['admin'] : []),
...(openUni ? ['openUniSearch'] : []),
...(katselmusViewer ? ['katselmusViewer'] : []),
...(fullSisuAccess ? ['fullSisuAccess'] : []),
] as Role[]