diff --git a/rowers/models.py b/rowers/models.py index 5edf81e7..593dfd1e 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -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'), diff --git a/rowers/rower_rules.py b/rowers/rower_rules.py new file mode 100644 index 00000000..0b89468a --- /dev/null +++ b/rowers/rower_rules.py @@ -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) diff --git a/rowers/teams.py b/rowers/teams.py index 6c3b681d..e487c5ea 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -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, diff --git a/rowers/views/teamviews.py b/rowers/views/teamviews.py index 4d9b1b9f..73108d9d 100644 --- a/rowers/views/teamviews.py +++ b/rowers/views/teamviews.py @@ -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)