Skip to content

Commit e88cfeb

Browse files
committed
Allow admin-groups to edit group data
1 parent fd19388 commit e88cfeb

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

admissions/admissions/permissions.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,15 @@ def has_object_permission(self, request, view, obj):
6464
if request.method in permissions.SAFE_METHODS:
6565
return True
6666

67+
# Allow a user to edit a group if it is the admin in an admission it is used
68+
admissions = Admission.objects.filter(groups__pk__contains=obj.pk)
69+
for admission in admissions:
70+
for admin_group in admission.admin_groups.all():
71+
if Membership.objects.filter(
72+
user=request.user.pk, group=admin_group.pk
73+
).exists():
74+
return True
75+
6776
# Allow a user to edit a group if it is a leader or recruiter in that group
6877
return (
6978
Membership.objects.filter(user=request.user.pk, group=obj.pk)

frontend/src/routes/AdmissionAdmin/EditGroup.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React from "react";
22
import styled from "styled-components";
33
import { useParams } from "react-router-dom";
44
import { useAdmission } from "src/query/hooks";
5-
import djangoData from "src/utils/djangoData";
65
import LoadingBall from "src/components/LoadingBall";
76
import EditGroupForm from "./components/EditGroupForm";
87
import { Wrapper, GroupLogo, GroupLogoWrapper } from "./components/styles";
@@ -19,7 +18,7 @@ export interface CsvData {
1918
}
2019

2120
const EditGroup = () => {
22-
const { admissionSlug } = useParams();
21+
const { admissionSlug, groupId } = useParams();
2322

2423
const {
2524
data: admission,
@@ -35,16 +34,15 @@ const EditGroup = () => {
3534
} else if (!groups) {
3635
return <div>Feil: klarte ikke laste inn grupper.</div>;
3736
} else {
38-
const group = (groups ?? []).find(
39-
(group) => group.name === djangoData.user.representative_of_group,
40-
);
37+
const group = (groups ?? []).find((group) => group.pk === groupId);
38+
console.log(group);
4139
if (!group) return <div>Feil: Ugyldig gruppe</div>;
4240

4341
return (
4442
<PageWrapper>
4543
<GroupLogoWrapper>
4644
<GroupLogo src={group.logo} />
47-
<h2>{djangoData.user.representative_of_group}</h2>
45+
<h2>{group.name}</h2>
4846
</GroupLogoWrapper>
4947

5048
<Wrapper>

frontend/src/routes/AdmissionAdmin/components/NavBar.tsx

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ interface Props {
1010
}
1111

1212
const NavBar: React.FC<Props> = ({ admission }) => {
13-
const representingGroup = useMemo(
13+
const administrateGroups = useMemo(
1414
() =>
15-
admission?.groups.find(
16-
(group) => group.name === djangoData.user.representative_of_group,
15+
admission?.groups.filter(
16+
(group) =>
17+
admission?.userdata.is_admin ||
18+
group.name === djangoData.user.representative_of_group,
1719
),
1820
[admission],
1921
);
@@ -27,10 +29,15 @@ const NavBar: React.FC<Props> = ({ admission }) => {
2729
<NavHeader>Administrer opptak</NavHeader>
2830
<NavLink to={"../admin/"}>Se søknader</NavLink>
2931
<NavHeader>Administrer grupper</NavHeader>
30-
{representingGroup ? (
31-
<NavLink to={"./groups/" + representingGroup.pk}>
32-
{representingGroup.name}
33-
</NavLink>
32+
{administrateGroups?.length !== 0 ? (
33+
administrateGroups?.map((administrateGroup) => (
34+
<NavLink
35+
key={administrateGroup.pk}
36+
to={"./groups/" + administrateGroup.pk}
37+
>
38+
{administrateGroup.name}
39+
</NavLink>
40+
))
3441
) : (
3542
<p>
3643
Du har ikke tilgang til å redigere noen av gruppene i dette opptaket.

0 commit comments

Comments
 (0)