From acb9bc325690e8fe3148280f4dec3ccc128f8216 Mon Sep 17 00:00:00 2001 From: cedrick2711 Date: Tue, 14 Jul 2026 12:38:57 -0400 Subject: [PATCH] =?UTF-8?q?modification=20des=20permissions=20de=20coach:?= =?UTF-8?q?=20Voit=20uniquement=20les=20tryouts=20de=20ses=20=C3=A9quipes.?= =?UTF-8?q?=20Evaluer=20un=20joueur=20retourne=20=C3=A0=20la=20page=20pr?= =?UTF-8?q?=C3=A9c=C3=A9dente=20au=20lieu=20de=20la=20page=20des=20evaluat?= =?UTF-8?q?ions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/extensions.cpython-313.pyc | Bin 0 -> 889 bytes __pycache__/models.cpython-313.pyc | Bin 0 -> 13680 bytes instance/team_tryouts.db | Bin 57344 -> 57344 bytes models.py | 22 +++++++++ routes/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 153 bytes routes/__pycache__/auth.cpython-313.pyc | Bin 0 -> 5522 bytes .../__pycache__/evaluations.cpython-313.pyc | Bin 0 -> 8637 bytes routes/__pycache__/main.cpython-313.pyc | Bin 0 -> 7682 bytes routes/__pycache__/teams.cpython-313.pyc | Bin 0 -> 9828 bytes routes/__pycache__/tryouts.cpython-313.pyc | Bin 0 -> 19569 bytes routes/__pycache__/users.cpython-313.pyc | Bin 0 -> 10077 bytes routes/evaluations.py | 2 +- routes/teams.py | 15 +++--- routes/tryouts.py | 44 ++++++------------ templates/pages/teams.html | 11 +++-- templates/pages/view_tryout.html | 12 ++--- 16 files changed, 56 insertions(+), 50 deletions(-) create mode 100644 __pycache__/extensions.cpython-313.pyc create mode 100644 __pycache__/models.cpython-313.pyc create mode 100644 routes/__pycache__/__init__.cpython-313.pyc create mode 100644 routes/__pycache__/auth.cpython-313.pyc create mode 100644 routes/__pycache__/evaluations.cpython-313.pyc create mode 100644 routes/__pycache__/main.cpython-313.pyc create mode 100644 routes/__pycache__/teams.cpython-313.pyc create mode 100644 routes/__pycache__/tryouts.cpython-313.pyc create mode 100644 routes/__pycache__/users.cpython-313.pyc diff --git a/__pycache__/extensions.cpython-313.pyc b/__pycache__/extensions.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..461034483e11ce161d12136b421d5113bb90ee6e GIT binary patch literal 889 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 literal 0 HcmV?d00001 diff --git a/instance/team_tryouts.db b/instance/team_tryouts.db index 748229d44957348e046dffe68630906d4d63cbce..91d116b02b58cb8e2354681f734feb0776fa6b1b 100644 GIT binary patch delta 160 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 R*c#%43j6NoI@}hQ^uJu1Eb#yU literal 0 HcmV?d00001 diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfbe9b2034b587e00aa85987c29189c2c613cdc3 GIT binary patch literal 7682 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 literal 0 HcmV?d00001 diff --git a/routes/__pycache__/teams.cpython-313.pyc b/routes/__pycache__/teams.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fba8f7d37b0b5273ecf7f346565c932ab894002 GIT binary patch literal 9828 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�T9!}a&k2HhR(lOsDW^QVNHRU4d@7!pkZI*p!o-_%vQ7C8j9RfI{(gXP z)Cu7;nPQBTb@+r(0_AFeitdLK;(Ur9K$k%X%oHIsL%wMxN%A{lv`CD8M|A&{X#9@g z{>Id-{Px~VzDHvEbM*J5^H$T%rWH$p^gkdyKUh5Ed*ov)Ve#UuW|P9@%>ZF>DPqpm zq1B#TlSsax2se^lx@`L<1;x!5OQNFpxx9Vt8kX%*Wb4Xgdp9X4Zg%RjNAj)t1}xjB z$ok7m(#~E^Q literal 0 HcmV?d00001 diff --git a/routes/__pycache__/tryouts.cpython-313.pyc b/routes/__pycache__/tryouts.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86171b9fd138804e010450c0a0c67f7ea7cae59b GIT binary patch literal 19569 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 Tq>ohM*H_X{e`>)5vU2_xeUT1J literal 0 HcmV?d00001 diff --git a/routes/__pycache__/users.cpython-313.pyc b/routes/__pycache__/users.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56c426d21e65128bf08c0897e1455cf6a3ab1295 GIT binary patch literal 10077 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/edit', methods=['POST']) @login_required def edit_team(team_id): - if not current_user.can_manage_teams(): - flash('You do not have permission to edit teams.', 'danger') + team = OrgTeam.query.get_or_404(team_id) + if not current_user.can_manage_this_org_team(team): + flash('You do not have permission to edit this team.', 'danger') return redirect(url_for('teams.list_teams')) - team = OrgTeam.query.get_or_404(team_id) name = request.form.get('name') coach_id = request.form.get('coach_id') @@ -105,11 +105,10 @@ def delete_team(team_id): @teams_bp.route('//add_player', methods=['POST']) @login_required def add_player(team_id): - if not current_user.can_manage_teams(): + team = OrgTeam.query.get_or_404(team_id) + if not current_user.can_manage_this_org_team(team): flash('Permission denied.', 'danger') return redirect(url_for('teams.list_teams')) - - team = OrgTeam.query.get_or_404(team_id) player_id = request.form.get('player_id') position = request.form.get('position', '') @@ -138,11 +137,11 @@ def add_player(team_id): @teams_bp.route('//remove_player/', methods=['POST']) @login_required def remove_player(team_id, player_id): - if not current_user.can_manage_teams(): + team = OrgTeam.query.get_or_404(team_id) + if not current_user.can_manage_this_org_team(team): flash('Permission denied.', 'danger') return redirect(url_for('teams.list_teams')) - team = OrgTeam.query.get_or_404(team_id) player = User.query.get_or_404(player_id) if player.team_id != team_id: diff --git a/routes/tryouts.py b/routes/tryouts.py index 9a93e1c..b7911a9 100644 --- a/routes/tryouts.py +++ b/routes/tryouts.py @@ -74,17 +74,8 @@ def create_tryout(): def edit_tryout(tryout_id): tryout = Tryout.query.get_or_404(tryout_id) - # Permission: president can edit any; manager can edit own; coach can edit if it targets their team - if current_user.role == 'president': - pass # allowed - elif current_user.role == 'manager' and tryout.created_by == current_user.id: - pass # allowed - elif current_user.role == 'coach': - org_team = OrgTeam.query.filter_by(coach_id=current_user.id).first() - if not org_team or tryout.target_org_team_id != org_team.id: - flash('You do not have permission to edit this tryout.', 'danger') - return redirect(url_for('tryouts.list_tryouts')) - else: + # Permission: president, manager (own tryouts), or coach (targets their team) + if not current_user.can_manage_this_tryout(tryout): flash('You do not have permission to edit this tryout.', 'danger') return redirect(url_for('tryouts.list_tryouts')) @@ -152,15 +143,7 @@ def view_tryout(tryout_id): }) # Determine if current user can edit this tryout - can_edit = False - if current_user.role == 'president': - can_edit = True - elif current_user.role == 'manager' and tryout.created_by == current_user.id: - can_edit = True - elif current_user.role == 'coach': - org_team = OrgTeam.query.filter_by(coach_id=current_user.id).first() - if org_team and tryout.target_org_team_id == org_team.id: - can_edit = True + can_edit = current_user.can_manage_this_tryout(tryout) # Get all players (for manager registration dropdown) all_players = User.query.filter_by(role='player').order_by(User.full_name).all() @@ -209,11 +192,10 @@ def register_for_tryout(tryout_id): @tryouts_bp.route('//status', methods=['POST']) @login_required def update_status(tryout_id): - if not can_manage(): + tryout = Tryout.query.get_or_404(tryout_id) + if not current_user.can_manage_this_tryout(tryout): flash('Permission denied.', 'danger') return redirect(url_for('tryouts.list_tryouts')) - - tryout = Tryout.query.get_or_404(tryout_id) new_status = request.form.get('status') if new_status in ['upcoming', 'in_progress', 'completed']: tryout.status = new_status @@ -224,7 +206,8 @@ def update_status(tryout_id): @tryouts_bp.route('//registration//status', methods=['POST']) @login_required def update_registration_status(tryout_id, player_id): - if not can_manage(): + tryout = Tryout.query.get_or_404(tryout_id) + if not current_user.can_manage_this_tryout(tryout): flash('Permission denied.', 'danger') return redirect(url_for('tryouts.list_tryouts')) @@ -239,11 +222,10 @@ def update_registration_status(tryout_id, player_id): @tryouts_bp.route('//register_player', methods=['POST']) @login_required def register_player(tryout_id): - if not can_manage(): + tryout = Tryout.query.get_or_404(tryout_id) + if not current_user.can_manage_this_tryout(tryout): flash('Permission denied.', 'danger') return redirect(url_for('tryouts.view_tryout', tryout_id=tryout_id)) - - tryout = Tryout.query.get_or_404(tryout_id) player_id = request.form.get('player_id') if not player_id: @@ -275,7 +257,8 @@ def register_player(tryout_id): @tryouts_bp.route('//team/create', methods=['POST']) @login_required def create_team(tryout_id): - if not can_manage(): + tryout = Tryout.query.get_or_404(tryout_id) + if not current_user.can_manage_this_tryout(tryout): flash('Permission denied.', 'danger') return redirect(url_for('tryouts.view_tryout', tryout_id=tryout_id)) @@ -290,13 +273,14 @@ def create_team(tryout_id): @tryouts_bp.route('//team//add', methods=['POST']) @login_required def add_to_team(tryout_id, team_id): - if not can_manage(): + team = Team.query.get_or_404(team_id) + tryout = Tryout.query.get_or_404(tryout_id) + if not current_user.can_manage_this_tryout(tryout): flash('Permission denied.', 'danger') return redirect(url_for('tryouts.view_tryout', tryout_id=tryout_id)) player_id = request.form.get('player_id') position = request.form.get('position', '') - team = Team.query.get_or_404(team_id) existing = TeamMember.query.filter_by(team_id=team_id, player_id=player_id).first() if existing: diff --git a/templates/pages/teams.html b/templates/pages/teams.html index ff14d00..3140b16 100644 --- a/templates/pages/teams.html +++ b/templates/pages/teams.html @@ -45,6 +45,7 @@ {% endif %} {% for team in teams %} +{% set can_manage_team = can_manage or (current_user.role == 'coach' and team.coach_id == current_user.id) %}

{{ team.name }}

@@ -76,7 +77,7 @@ Position / Role Email Phone - {% if can_manage %} + {% if can_manage_team %} Actions {% endif %} @@ -93,7 +94,7 @@ {{ player.role | capitalize }} {{ player.email }} {{ player.phone or '-' }} - {% if can_manage %} + {% if can_manage_team %}
@@ -106,11 +107,11 @@ {% else %} - +

No players assigned

- {% if can_manage %} + {% if can_manage_team %}

Add players to this team using the form below.

{% endif %}
@@ -121,7 +122,7 @@
- {% if can_manage %} + {% if can_manage_team %}
Add Player to {{ team.name }}
diff --git a/templates/pages/view_tryout.html b/templates/pages/view_tryout.html index 57ca69c..eef9458 100644 --- a/templates/pages/view_tryout.html +++ b/templates/pages/view_tryout.html @@ -9,7 +9,7 @@

Tryout Details

- {% if current_user.can_manage_tryouts() %} + {% if can_edit %} @@ -203,7 +203,7 @@
  • No players assigned yet.
  • {% endfor %} - {% if current_user.can_manage_tryouts() and registered_players %} + {% if can_edit and registered_players %}