You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

47 lines
1.8 KiB

# -*- coding: utf-8 -*-
# Copyright 2012-2018 Therp BV <https://therp.nl>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from logging import getLogger
from odoo import api, fields, models
_logger = getLogger(__name__)
class ResCompanyLdap(models.Model):
_inherit = 'res.company.ldap'
group_mapping_ids = fields.One2many(
'res.company.ldap.group_mapping',
'ldap_id', 'Group mappings',
help='Define how Odoo groups are assigned to ldap users',
)
only_ldap_groups = fields.Boolean(
'Only ldap groups', default=False,
help='If this is checked, manual changes to group membership are '
'undone on every login (so Odoo groups are always synchronous '
'with LDAP groups). If not, manually added groups are preserved.',
)
@api.model
def get_or_create_user(self, conf, login, ldap_entry):
op_obj = self.env['res.company.ldap.operator']
user_id = super(ResCompanyLdap, self).get_or_create_user(
conf, login, ldap_entry
)
if not user_id:
return user_id
this = self.browse(conf['id'])
user = self.env['res.users'].browse(user_id)
if this.only_ldap_groups:
_logger.debug('deleting all groups from user %d', user_id)
user.write({'groups_id': [(5, False, False)]})
for mapping in this.group_mapping_ids:
operator = getattr(op_obj, mapping.operator)
_logger.debug('checking mapping %s', mapping)
if operator(ldap_entry, mapping):
_logger.debug(
'adding user %d to group %s', user, mapping.group_id.name,
)
user.write({'groups_id': [(4, mapping.group_id.id)]})
return user_id