All checks were successful
Deploy Development / deploy (push) Successful in 40s
Test Suite / pytest-backend (push) Successful in 25s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Successful in 23s
- Introduced a new utility function to filter and return only active club memberships, improving role management and access control. - Updated various components and pages to utilize the new active club memberships function, ensuring only relevant memberships are considered. - Enhanced user interface elements to reflect the status of club memberships, including visual indicators for inactive memberships. - Improved backend logic for resolving tenant contexts and managing club roles based on active memberships.
30 lines
1.1 KiB
JavaScript
30 lines
1.1 KiB
JavaScript
import { activeClubMemberships } from './activeClub'
|
|
|
|
function userIsClubAdminForClub(user, clubId) {
|
|
if (clubId == null || user == null) return false
|
|
const cid = Number(clubId)
|
|
const row = activeClubMemberships(user.clubs).find((c) => Number(c.id) === cid)
|
|
return Array.isArray(row?.roles) && row.roles.includes('club_admin')
|
|
}
|
|
|
|
function userHasAnyClubAdminRole(user) {
|
|
return activeClubMemberships(user?.clubs).some((c) => Array.isArray(c.roles) && c.roles.includes('club_admin'))
|
|
}
|
|
|
|
/**
|
|
* Ob die Löschen-Aktion in der Liste sinnvoll angeboten werden kann (Server hat letzte Instanz).
|
|
*/
|
|
export function canUserRequestExerciseDelete(user, exercise) {
|
|
if (!user || !exercise) return false
|
|
const role = String(user.role || '').toLowerCase()
|
|
if (role === 'admin' || role === 'superadmin') return true
|
|
const vis = exercise.visibility || 'private'
|
|
const mine = Number(exercise.created_by) === Number(user.id)
|
|
if (vis === 'official') return false
|
|
if (vis === 'club') {
|
|
return userIsClubAdminForClub(user, exercise.club_id)
|
|
}
|
|
if (mine) return true
|
|
return userHasAnyClubAdminRole(user)
|
|
}
|