Private
Public Access
1
0

rules now separately in rower_rules

This commit is contained in:
Sander Roosendaal
2020-01-11 16:38:53 +01:00
parent 293d4dca17
commit ad9cab4392
4 changed files with 42 additions and 39 deletions

View File

@@ -39,8 +39,9 @@ import pandas as pd
from dateutil import parser
import datetime
import rules
from rules.contrib.models import RulesModel
#from rules.contrib.models import RulesModel
from rowers.rows import validate_file_extension
from collections import OrderedDict
@@ -56,39 +57,7 @@ from rowsandall_app.settings import (
TWEET_CONSUMER_SECRET,
)
# PERMISSIONS
@rules.predicate
def is_team_manager(user,team):
return team.manager == user
@rules.predicate
def is_team_member(user,team):
members = Rower.objects.filter(team__in=[team])
return user in [member.user for member in members]
@rules.predicate
def is_coach(user):
r = Rower.objects.get(user=user)
return r.rowerplan in ['coach','freecoach']
@rules.predicate
def can_view_team(user,team):
# user based
r = Rower.objects.get(user=user)
if r.rowerplan == 'basic' and team.manager.rower.rowerplan != 'coach':
return False
# team is public
if team.private == 'open':
return True
# team is private
return is_team_member(user,team) | is_team_manager(user,team)
# For Team functionality
rules.add_perm('teams.view_team',can_view_team)
rules.add_perm('teams.add_team',is_coach)
rules.add_perm('teams.change_team',is_team_manager)
rules.add_perm('teams.delete_team',is_team_manager)
# END PERMISSIONS
@@ -368,11 +337,8 @@ def is_not_basic(user):
)
@python_2_unicode_compatible
class Team(RulesModel):
class Team(models.Model):
choices = (
('private','private'),
('open','open'),

33
rowers/rower_rules.py Normal file
View File

@@ -0,0 +1,33 @@
import rules
# PERMISSIONS
@rules.predicate
def is_team_manager(user,team):
return team.manager == user
@rules.predicate
def is_team_member(user,team):
members = team.rower.all()
return user in [member.user for member in members]
@rules.predicate
def is_coach(user):
return user.rower.rowerplan in ['coach','freecoach']
@rules.predicate
def can_view_team(user,team):
# user based
if user.rower.rowerplan == 'basic' and team.manager.rower.rowerplan != 'coach':
return False
# team is public
if team.private == 'open':
return True
# team is private
return is_team_member(user,team) | is_team_manager(user,team)
# For Team functionality
rules.add_perm('teams.view_team',can_view_team)
rules.add_perm('teams.add_team',is_coach)
rules.add_perm('teams.change_team',is_team_manager)
rules.add_perm('teams.delete_team',is_team_manager)

View File

@@ -23,9 +23,11 @@ queuehigh = django_rq.get_queue('low')
from rowers.models import (
Rower, Workout, Team, TeamInvite,User,TeamRequest, CoachRequest, CoachOffer,
CoachingGroup,is_team_manager,is_team_member,is_coach
CoachingGroup
)
from rowers.rower_rules import is_team_manager,is_team_member,is_coach
from rowers.tasks import (
handle_sendemail_invite,
handle_sendemail_request,

View File

@@ -5,6 +5,8 @@ from __future__ import unicode_literals
from rowers.views.statements import *
from rowers.rower_rules import *
def get_team_by_pk(request,team_id):
return get_object_or_404(Team,pk=team_id)