- Remove all debug logging and statements for production deployment - Convert operational logging from info to debug level where appropriate - Clean up debug test files and commented code - Refactor access control helpers into centralized AccessControlMixin - Consolidate duplicated access control methods across controllers - Enforce team-based access control for all portal users - Fix access control logic to match expected security behavior - Move TODO.md to notes/ directory for better organization - All 76 tests passing with proper security enforcement Production ready: Clean codebase with centralized access control and no debug noise
103 lines
4.2 KiB
Python
103 lines
4.2 KiB
Python
from odoo import models, fields, api, _, Command
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class User(models.Model):
|
|
_inherit = "res.users"
|
|
|
|
accessible_team_ids = fields.Many2many(
|
|
comodel_name="sports.team",
|
|
compute="_compute_accessible_team_ids",
|
|
inverse="_inverse_accessible_team_ids",
|
|
)
|
|
|
|
def _compute_accessible_team_ids(self):
|
|
for rec in self:
|
|
rec.accessible_team_ids = rec.partner_id.teams_served_ids
|
|
|
|
def _inverse_accessible_team_ids(self):
|
|
for rec in self:
|
|
removed_teams = rec.partner_id.teams_served_ids - rec.accessible_team_ids
|
|
added_teams = rec.accessible_team_ids - rec.partner_id.teams_served_ids
|
|
removed_teams = rec.partner_id.teams_served_ids.filtered(
|
|
lambda team: team in removed_teams
|
|
)
|
|
removed_teams.remove_access(self)
|
|
self.env["sports.team.staff"].create(
|
|
[
|
|
{
|
|
"team_id": team.id,
|
|
"partner_id": rec.partner_id.id,
|
|
"role": "other",
|
|
}
|
|
for team in added_teams
|
|
]
|
|
)
|
|
|
|
def write(self, vals):
|
|
"""Override write to trigger treatment professional group assignment when portal access is granted."""
|
|
# Process user updates for portal access changes
|
|
|
|
# Check if groups_id is being modified (portal access being granted/revoked)
|
|
if 'groups_id' in vals:
|
|
# Get the portal group reference
|
|
portal_group = self.env.ref('base.group_portal')
|
|
|
|
# Store old group memberships before making changes
|
|
old_groups_by_user = {user.id: user.groups_id.ids for user in self}
|
|
# Store old group memberships for comparison
|
|
|
|
# Apply the changes first
|
|
result = super().write(vals)
|
|
|
|
# Check each user to see if portal access was granted
|
|
for user in self:
|
|
old_groups = old_groups_by_user[user.id]
|
|
new_groups = user.groups_id.ids
|
|
# Check if portal access was granted
|
|
|
|
if portal_group.id in new_groups and portal_group.id not in old_groups:
|
|
# Portal access was just granted - trigger treatment professional group assignment
|
|
# Portal access was just granted - trigger treatment professional group assignment
|
|
staff_records = self.env['sports.team.staff'].search([
|
|
('partner_id', '=', user.partner_id.id)
|
|
])
|
|
if staff_records:
|
|
staff_records._update_treatment_professional_group(user)
|
|
|
|
return result
|
|
else:
|
|
# No group changes, use normal write
|
|
pass
|
|
|
|
# If groups_id is not being modified, use normal write
|
|
return super().write(vals)
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
"""Override create to trigger treatment professional group assignment when portal users are created."""
|
|
# Process user creation for portal access
|
|
|
|
# Create the users first
|
|
users = super().create(vals_list)
|
|
|
|
# Get the portal group reference
|
|
portal_group = self.env.ref('base.group_portal')
|
|
# Check for portal access in created users
|
|
|
|
# Check each created user to see if they were created with portal access
|
|
for user in users:
|
|
# Check if user was created with portal access
|
|
|
|
if portal_group.id in user.groups_id.ids:
|
|
# User was created with portal access - trigger treatment professional group assignment
|
|
# User was created with portal access - trigger treatment professional group assignment
|
|
staff_records = self.env['sports.team.staff'].search([
|
|
('partner_id', '=', user.partner_id.id)
|
|
])
|
|
if staff_records:
|
|
staff_records._update_treatment_professional_group(user)
|
|
|
|
return users
|