180 lines
3.9 KiB
Python
180 lines
3.9 KiB
Python
import rules
|
|
import datetime
|
|
|
|
# PERMISSIONS
|
|
|
|
# USER permissions
|
|
|
|
@rules.predicate
|
|
def user_is_not_basic(user):
|
|
if user.rower.rowerplan != 'basic':
|
|
return True
|
|
|
|
if user.rower.protrialexpires >= datetime.date.today() and user.rower.plantrialexpires >= datetime.date.today():
|
|
return True
|
|
|
|
return False
|
|
|
|
@rules.predicate
|
|
def is_coach(user):
|
|
return user.rower.rowerplan in ['coach','freecoach']
|
|
|
|
@rules.predicate
|
|
def is_promember(user):
|
|
try:
|
|
r = user.rower
|
|
except AttributeError:
|
|
return False
|
|
|
|
return r.rowerplan in ['pro','coach','plan']
|
|
|
|
@rules.predicate
|
|
def is_protrial(user):
|
|
try:
|
|
r = user.rower
|
|
except AttributeError:
|
|
return False
|
|
|
|
if r.rowerplan == 'basic':
|
|
return r.protrialexpires >= datetime.date.today()
|
|
if r.rowerplan == 'freecoach':
|
|
if r.mycoachgroup is not None:
|
|
return len(r.mycoachgroup)>=4
|
|
|
|
return False
|
|
|
|
ispromember = is_promember | is_protrial
|
|
|
|
# User / Coach relationships (Rower object)
|
|
|
|
@rules.predicate
|
|
def can_plan(user):
|
|
return user.rower.rowerplan in ['plan','coach','freecoach']
|
|
|
|
# checks if rower is coach of user
|
|
@rules.predicate
|
|
def is_coach_user(user,rower):
|
|
try:
|
|
r = user.rower
|
|
except AttributeError:
|
|
return False
|
|
|
|
if rower == r:
|
|
return True
|
|
|
|
coaches = []
|
|
|
|
for group in r.coachinggroups.all():
|
|
newcoaches = group.get_coaches()
|
|
for coach in newcoaches:
|
|
coaches.append(coach)
|
|
|
|
for coach in coaches:
|
|
if rower == coach:
|
|
return True
|
|
|
|
return False
|
|
|
|
@rules.predicate
|
|
def is_rower_team_member(user,rower):
|
|
if user.rower == rower:
|
|
return True
|
|
|
|
teams = user.rower.team.all()
|
|
|
|
for team in teams:
|
|
if team.private == 'open':
|
|
if team in rower.team.all():
|
|
return True
|
|
if team.manager == rower.user:
|
|
return True
|
|
|
|
return False
|
|
|
|
@rules.predicate
|
|
def can_plan_user(user,rower):
|
|
try:
|
|
r = user.rower
|
|
except AttributeError:
|
|
return False
|
|
|
|
if rower == r:
|
|
return True
|
|
|
|
# below
|
|
team_managers = [t.manager for t in rower.team.all() and can_plan(t.manager)]
|
|
if user_is_not_basic(user):
|
|
return user in team_managers
|
|
|
|
return False
|
|
|
|
rules.add_perm('rower.can_plan',can_plan_user) # replaces checkaccessplanuser
|
|
rules.add_perm('rower.is_coach',is_coach_user) # replaces checkaccessuser
|
|
|
|
|
|
# WORKOUT permissions
|
|
|
|
@rules.predicate
|
|
def is_workout_user(user,workout):
|
|
if user.is_anonymous:
|
|
return False
|
|
|
|
try:
|
|
r = user.rower
|
|
except AttributeError:
|
|
return False
|
|
|
|
if workout.user == r:
|
|
return True
|
|
|
|
return is_coach_user(workout.user.user,user.rower)
|
|
|
|
|
|
@rules.predicate
|
|
def can_view_workout(user,workout):
|
|
if workout.privacy != 'private':
|
|
return True
|
|
return False
|
|
|
|
|
|
rules.add_perm('workout.change_workout',is_workout_user) # replaces checkworkoutuser
|
|
rules.add_perm('workout.view_workout',can_view_workout) # replaces checkworkoutuserview
|
|
|
|
|
|
|
|
# checkviewworkouts
|
|
|
|
# PLANNING permissions
|
|
|
|
# checkaccessplanuser (models.py)
|
|
# getrequestrower, getrequestplanrower
|
|
|
|
# TEAM 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 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',user_is_not_basic)
|
|
rules.add_perm('teams.change_team',is_team_manager)
|
|
rules.add_perm('teams.delete_team',is_team_manager)
|