Skip to content
Snippets Groups Projects
Verified Commit 7c1ecce6 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Fix permissions

parent 412153bf
No related branches found
No related tags found
1 merge request!3Resolve "Add integration in Alsijil"
...@@ -5,10 +5,11 @@ from aleksis.core.util.predicates import ( ...@@ -5,10 +5,11 @@ from aleksis.core.util.predicates import (
has_global_perm, has_global_perm,
has_object_perm, has_object_perm,
has_person, has_person,
is_group_owner,
) )
from .models import SeatingPlan from .models import SeatingPlan
from .util.perms import is_group_owner from .util.perms import is_plan_group_owner
# View seating plan list # View seating plan list
view_seatingplans_predicate = has_person & ( view_seatingplans_predicate = has_person & (
...@@ -22,13 +23,13 @@ add_perm("stoelindeling.view_seatingplans_rule", view_seatingplans_predicate) ...@@ -22,13 +23,13 @@ add_perm("stoelindeling.view_seatingplans_rule", view_seatingplans_predicate)
view_seatingplan_predicate = has_person & ( view_seatingplan_predicate = has_person & (
has_global_perm("stoelindeling.view_seatingplan") has_global_perm("stoelindeling.view_seatingplan")
| has_object_perm("stoelindeling.view_seatingplan") | has_object_perm("stoelindeling.view_seatingplan")
| is_group_owner | is_plan_group_owner
) )
add_perm("stoelindeling.view_seatingplan_rule", view_seatingplan_predicate) add_perm("stoelindeling.view_seatingplan_rule", view_seatingplan_predicate)
# Add seating plan # Add seating plan
add_seatingplan_predicate = view_seatingplans_predicate & has_global_perm( add_seatingplan_predicate = view_seatingplans_predicate & (
"stoelindeling.add_seatingplan" has_global_perm("stoelindeling.add_seatingplan") | is_group_owner | is_plan_group_owner
) )
add_perm("stoelindeling.add_seatingplan_rule", add_seatingplan_predicate) add_perm("stoelindeling.add_seatingplan_rule", add_seatingplan_predicate)
...@@ -37,17 +38,17 @@ copy_seatingplan_predicate = view_seatingplan_predicate & add_seatingplan_predic ...@@ -37,17 +38,17 @@ copy_seatingplan_predicate = view_seatingplan_predicate & add_seatingplan_predic
add_perm("stoelindeling.copy_seatingplan_rule", copy_seatingplan_predicate) add_perm("stoelindeling.copy_seatingplan_rule", copy_seatingplan_predicate)
# Edit seating plan # Edit seating plan
edit_seatingplan_predicate = view_seatingplans_predicate & ( edit_seatingplan_predicate = view_seatingplan_predicate & (
has_global_perm("stoelindeling.change_seatingplan") has_global_perm("stoelindeling.change_seatingplan")
| is_group_owner | is_plan_group_owner
| has_object_perm("stoelindeling.change_seatingplan") | has_object_perm("stoelindeling.change_seatingplan")
) )
add_perm("stoelindeling.edit_seatingplan_rule", edit_seatingplan_predicate) add_perm("stoelindeling.edit_seatingplan_rule", edit_seatingplan_predicate)
# Delete seating plan # Delete seating plan
delete_seatingplan_predicate = view_seatingplans_predicate & ( delete_seatingplan_predicate = view_seatingplan_predicate & (
has_global_perm("stoelindeling.delete_seatingplan") has_global_perm("stoelindeling.delete_seatingplan")
| is_group_owner | is_plan_group_owner
| has_object_perm("stoelindeling.delete_seatingplan") | has_object_perm("stoelindeling.delete_seatingplan")
) )
add_perm("stoelindeling.delete_seatingplan_rule", delete_seatingplan_predicate) add_perm("stoelindeling.delete_seatingplan_rule", delete_seatingplan_predicate)
...@@ -3,12 +3,24 @@ from django.db.models import Q ...@@ -3,12 +3,24 @@ from django.db.models import Q
from guardian.shortcuts import get_objects_for_user from guardian.shortcuts import get_objects_for_user
from rules import predicate from rules import predicate
from aleksis.core.models import Group
from ..models import SeatingPlan from ..models import SeatingPlan
@predicate @predicate
def is_group_owner(user, seating_plan: SeatingPlan) -> bool: def is_group_owner(user, group: Group) -> bool:
"""Predicate which checks if the user is a owner of the group."""
if not isinstance(group, Group):
return False
return user.person in group.owners.all()
@predicate
def is_plan_group_owner(user, seating_plan: SeatingPlan) -> bool:
"""Predicate which checks if the user is a owner of the seating plan's group.""" """Predicate which checks if the user is a owner of the seating plan's group."""
if not isinstance(seating_plan, SeatingPlan):
return False
return user.person in seating_plan.group.owners.all() return user.person in seating_plan.group.owners.all()
......
...@@ -16,8 +16,8 @@ from aleksis.core.mixins import ( ...@@ -16,8 +16,8 @@ from aleksis.core.mixins import (
AdvancedEditView, AdvancedEditView,
SuccessNextMixin, SuccessNextMixin,
) )
from aleksis.core.views import LoginView from aleksis.core.views import LoginView
from .forms import SeatFormSet, SeatingPlanCopyForm, SeatingPlanCreateForm, SeatingPlanForm from .forms import SeatFormSet, SeatingPlanCopyForm, SeatingPlanCreateForm, SeatingPlanForm
from .models import Seat, SeatingPlan from .models import Seat, SeatingPlan
from .tables import SeatingPlanTable from .tables import SeatingPlanTable
...@@ -58,6 +58,14 @@ class SeatingPlanCreateView(PermissionRequiredMixin, SuccessNextMixin, AdvancedC ...@@ -58,6 +58,14 @@ class SeatingPlanCreateView(PermissionRequiredMixin, SuccessNextMixin, AdvancedC
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
kwargs["request"] = self.request kwargs["request"] = self.request
initial = {}
if "room" in self.request.GET:
initial["room"] = self.request.GET["room"]
if "subject" in self.request.GET:
initial["subject"] = self.request.GET["subject"]
if "group" in self.request.GET:
initial["group"] = self.request.GET["group"]
kwargs["initial"] = initial
return kwargs return kwargs
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment