mirror of
https://github.com/OCA/server-backend.git
synced 2025-02-18 09:52:42 +02:00
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
# Copyright (C) 2021 Open Source Integrators
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api, models
|
|
|
|
|
|
class ResUsers(models.Model):
|
|
_inherit = "res.users"
|
|
|
|
@classmethod
|
|
def authenticate(cls, db, login, password, user_agent_env):
|
|
uid = super().authenticate(db, login, password, user_agent_env)
|
|
# On login, ensure the proper roles are applied
|
|
# The last Role applied may not be the correct one,
|
|
# sonce the new session current company can be different
|
|
with cls.pool.cursor() as cr:
|
|
env = api.Environment(cr, uid, {})
|
|
if env.user.role_line_ids:
|
|
env.user.set_groups_from_roles()
|
|
return uid
|
|
|
|
def _get_enabled_roles(self):
|
|
res = super()._get_enabled_roles()
|
|
if self.role_line_ids:
|
|
active_roles = self.env["res.users.role.line"]
|
|
if self.env.context.get("active_company_ids"):
|
|
company_ids = self.env.context.get("active_company_ids")
|
|
else:
|
|
company_ids = self.company_id.ids
|
|
for role_line in self.role_line_ids:
|
|
if not role_line.company_id:
|
|
active_roles |= role_line
|
|
elif role_line.company_id.id in company_ids:
|
|
role_line_companies = self.role_line_ids.filtered(
|
|
lambda x: x.role_id == role_line.role_id
|
|
and x.company_id.id in company_ids
|
|
)
|
|
if len(role_line_companies) == len(company_ids):
|
|
active_roles |= role_line
|
|
return active_roles
|
|
return res
|