Initial commit: OCA Server Auth packages (29 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:06 +02:00
commit 3ed80311c4
1325 changed files with 127292 additions and 0 deletions

View file

@ -0,0 +1,46 @@
# LDAP groups assignment
Odoo addon: users_ldap_groups
## Installation
```bash
pip install odoo-bringout-oca-server-auth-users_ldap_groups
```
## Dependencies
This addon depends on:
- auth_ldap
## Manifest Information
- **Name**: LDAP groups assignment
- **Version**: 16.0.1.0.1
- **Category**: Authentication
- **License**: AGPL-3
- **Installable**: False
## Source
Based on [OCA/server-auth](https://github.com/OCA/server-auth) branch 16.0, addon `users_ldap_groups`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Users_ldap_groups Module - users_ldap_groups
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for users_ldap_groups. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [auth_ldap](../../odoo-bringout-oca-ocb-auth_ldap)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon users_ldap_groups or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-server-auth-users_ldap_groups"
# or
uv pip install odoo-bringout-oca-server-auth-users_ldap_groups"
```

View file

@ -0,0 +1,15 @@
# Models
Detected core models and extensions in users_ldap_groups.
```mermaid
classDiagram
class res_company_ldap_group_mapping
class res_company_ldap_operator
class res_company_ldap
class res_users
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: users_ldap_groups. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon users_ldap_groups
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,34 @@
# Security
Access control and security definitions in users_ldap_groups.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../users_ldap_groups/security/ir.model.access.csv)**
- 1 model access rules
## Record Rules
Row-level security rules defined in:
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[ir.model.access.csv](../users_ldap_groups/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon users_ldap_groups
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-server-auth-users_ldap_groups"
version = "16.0.0"
description = "LDAP groups assignment - Adds user accounts to groups based on rules defined by the administrator."
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-server-auth-auth_ldap>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["users_ldap_groups"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,109 @@
======================
LDAP groups assignment
======================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e9016a5e491a0652aa384dd8c4e7ecf8d1091a4d7895f1b720d9a7b84814ab10
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github
:target: https://github.com/OCA/server-auth/tree/16.0/users_ldap_groups
:alt: OCA/server-auth
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-users_ldap_groups
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: https://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
Adds user accounts to groups based on rules defined by the administrator.
**Table of contents**
.. contents::
:local:
Usage
=====
Define mappings in Settings / General Settings / Integrations / LDAP Authentication / LDAP Server
Decide whether you want only groups mapped from LDAP (`Only LDAP groups` checked) or a mix of manually set groups and LDAP groups (`Only LDAP groups` unchecked).
Setting this to "no" will result in users never losing privileges when you remove them from a LDAP group, so that's a potential security issue.
It is still the default to prevent losing group information by accident.
If set to "Yes", you need to make sure each user has at least on of the "User types" groups
For active directory, use LDAP attribute 'memberOf' and operator 'contains'. Fill in the DN of the windows group as value and choose an Odoo group users with this windows group are to be assigned to.
For posix accounts, use operator 'query' and a value like::
(&(cn=bzr)(objectClass=posixGroup)(memberUid=$uid))
The operator query matches if the filter in value returns something, and value
can contain ``$attribute`` which will be replaced by the first value of the
user's LDAP record's attribute named `attribute`.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-auth/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-auth/issues/new?body=module:%20users_ldap_groups%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Therp BV
Contributors
~~~~~~~~~~~~
* Holger Brunn <hbrunn@therp.nl>
* Giacomo Spettoli <giacomo.spettoli@gmail.com>
* `CorporateHub <https://corporatehub.eu/>`__
* Alexey Pelykh <alexey.pelykh@corphub.eu>
* Tecnativa <https://www.tecnativa.com>
* João Marques
* Carolina Fernandez
* Dhara Solanki <dhara.solanki@initos.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/server-auth <https://github.com/OCA/server-auth/tree/16.0/users_ldap_groups>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,3 @@
# Copyright 2012-2018 Therp BV <https://therp.nl>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models

View file

@ -0,0 +1,18 @@
# Copyright 2012-2018 Therp BV <https://therp.nl>
# Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
# Copyright 2021 Tecnativa - João Marques
# Copyright 2023 Tecnativa - Carolina Fernandez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "LDAP groups assignment",
"version": "16.0.1.0.1",
"depends": ["auth_ldap"],
"author": "Therp BV, " "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-auth",
"license": "AGPL-3",
"summary": "Adds user accounts to groups based on rules defined "
"by the administrator.",
"category": "Authentication",
"data": ["views/res_company_ldap_views.xml", "security/ir.model.access.csv"],
"external_dependencies": {"python": ["python-ldap"]},
}

View file

@ -0,0 +1,157 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr "LDAP postavke tvrtke"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Definiraj kako su Odoo grupe dodijeljene LDAP korisnicima"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Definicija LDAP operacija"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Naziv"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Mapiranje grupa"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "LDAP atribut"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr "LDAP mapiranje grupa"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "LDAP server"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Zadnje modificirano"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Zadnje ažurirano"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr "Mapiranje korisničkih grupa"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr "Odoo grupa"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr "Samo LDAP grupe"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr "Operater"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr "Odoo grupa za dodelu"
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr "Korisnik"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr "Vrijednost"

View file

@ -0,0 +1,163 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-29 11:14+0000\n"
"PO-Revision-Date: 2015-09-18 13:56+0000\n"
"Last-Translator: <>\n"
"Language-Team: German (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Erstellt von"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Erstellt am:"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
#, fuzzy
msgid "Last Modified on"
msgstr "Zuletzt aktualisiert am"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Zuletzt aktualisiert von"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Zuletzt aktualisiert am"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr ""
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr ""

View file

@ -0,0 +1,175 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-29 11:14+0000\n"
"PO-Revision-Date: 2023-10-15 19:36+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr "Configuración LDAP de la Compañía"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Creado en"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Definir cómo se asignan los grupos de Odoo a los usuarios LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Definición de las operaciones LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Asignaciones de grupos"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
"Si esta marcada, los cambios manuales en la pertenencia a un grupo se "
"deshacen en cada inicio de sesión (por lo que los grupos de Odoo están "
"siempre sincronizados con los grupos LDAP). Si no, los grupos añadidos "
"manualmente se conservan."
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "Atributo LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr "Asignación de grupos LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "Servidor LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Última actualización de"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr "Mapa de grupos de usuarios"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr "Grupo Odoo"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr "Sólo grupos LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr "Operador"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
"El atributo LDAP a comprobar.\n"
"En ActiveDirectory, use \"memberOf\"."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr "El grupo Odoo a asignar"
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
"El usuario creado necesita tener definido uno (y sólo uno) de los grupos "
"'Tipos de usuario /'."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
"El operador para cotejar el atributo con el valor\n"
"Para active directory, utilice 'contains"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
"El valor con el que se comprobará el atributo.\n"
"Para active directory, utilice el dn del grupo deseado"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr "Usuario"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr "Valor"

View file

@ -0,0 +1,181 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-29 11:14+0000\n"
"PO-Revision-Date: 2018-12-12 19:58+0000\n"
"Last-Translator: Alexandre Fayolle <alexandre.fayolle@camptocamp.com>\n"
"Language-Team: French (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.3\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Créé le"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Définir comment les groupes Odoo sont attribués aux utilisateurs LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Définition des opérations LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Tableau de conversion des groupes"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
"Si activé, les configuration manuelles de groupes sont annulées à chaque "
"connexion (et donc les groupes Odoo sont toujours synchrones avec les "
"groupes LDAP). Sinon, les affectations manuelles de groupes sont préservées."
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "Attributs LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "Serveur LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Dernière mise à jour le"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr "Conversions de groupes utilisateurs"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr "Groupe Odoo"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr "Uniquement les groupes LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr "Opérateur"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
"L'attribut LDAP à vérifier.\n"
"Pour Active Directory, utiliser memberOf."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr "Groupe Odoo à assigner"
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
"L'opérateur à utiliser pour vérifier la valeur de l'attribut.\n"
"Pour Active Directory, utilisez 'contains'."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
"La valeur à comparer à l'attribut.\n"
"Pour Active Directory, utilisez le dn du groupe souhaité."
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr "Valeur"
#~ msgid "Users"
#~ msgstr "Utilisateurs"
#~ msgid "res.company.ldap"
#~ msgstr "res.company.ldap"
#~ msgid "res.company.ldap.group_mapping"
#~ msgstr "res.company.ldap.group_mapping"

View file

@ -0,0 +1,162 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-11-13 17:34+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: none\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Definiraj kako su Odoo grupe dodijeljene LDAP korisnicima"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Definicija LDAP operacija"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Naziv"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Mapiranje grupa"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
#, fuzzy
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "LDAP atribut"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "LDAP server"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Zadnje modificirano"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Zadnje ažurirano"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr ""
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr ""
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr ""

View file

@ -0,0 +1,174 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-01-03 14:33+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr "Configurazione LDAP azienda"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Creato il"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Indica come assegnare i gruppi Odoo agli utenti LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Definizione delle operazioni LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Mappature gruppi"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
"Se selezionata, le modifiche manuali di appartenenza a un gruppo vengono "
"annullate ad ogni accesso (in questo modo i gruppi Odoo restano sempre "
"sincronizzati con quelli LDAP). In caso contrario, vengono confermate."
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "Attributo LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr "Mappatura gruppi LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "Server LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr "Mappa gruppi utente"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr "Gruppo Odoo"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr "Solo gruppi LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr "Operatore"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
"Attributo LDAP da controllare.\n"
"Per Active Directory utilizzare memberOf."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr "Il gruppo Odoo da assegnare"
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
"Per l'utente creato è necessario indicare uno dei gruppi \"Tipologie utente/"
"\" (e solo uno)."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
"Operatore di confronto tra attributo e valore\n"
"Per Active Directory utilizzare \"contiene\""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
"Valore di confronto per l'attributo.\n"
"Per Active Directory utilizzare il dn del gruppo desiderato"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr "Utente"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr "Valore"
#~ msgid "Users"
#~ msgstr "Utenti"

View file

@ -0,0 +1,188 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
# Translators:
# Armando Vulcano Junior <vulcano@uol.com.br>, 2015
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-29 11:14+0000\n"
"PO-Revision-Date: 2024-05-22 02:02+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/"
"OCA-server-tools-8-0/language/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr "Configuração LDAP da empresa"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Criado em"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Define como grupos Odoo são atribuídos aos usuários LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Definição de operações LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Exibir Nome"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Mapeamento de Grupos"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "Identificação"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
"Se esta opção for marcada, as alterações manuais para participação no grupo "
"são desfeitas em cada login (grupos para Odoo estão sempre em sincronia com "
"grupos LDAP). Se não, grupos adicionados manualmente serão preservados."
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "Atributo LDAP"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr "Mapeamento de grupo LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "Servidor LDAP"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Última atualização por"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Última atualização em"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr "Mapear Grupos de Usuários"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr "Grupo Odoo"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr "Apenas grupos ldap"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr "Operador"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
"O atributo LDAP para checar\n"
"Para active directory, use memberOf."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr "Grupo Odoo para atribuir"
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
"O usuário criado precisa ter um (e apenas um) dos grupos 'Tipos de usuário/' "
"definidos."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
"O operador para verificar o atributo contra o valor\n"
"Para active directory, use 'contains'"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
"O valor para verificar contra o atributo\n"
"Para active directory, use de dn do grupo desejado"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr "Usuário"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr "Valor"
#~ msgid "Users"
#~ msgstr "Usuários"
#~ msgid "res.company.ldap"
#~ msgstr "res.company.ldap"
#~ msgid "res.company.ldap.group_mapping"
#~ msgstr "res.company.ldap.group_mapping"
#~ msgid "OpenERP group"
#~ msgstr "Grupo OpenERP"

View file

@ -0,0 +1,186 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
# Translators:
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-09-29 11:14+0000\n"
"PO-Revision-Date: 2020-04-13 16:19+0000\n"
"Last-Translator: Matjaz Mozetic <matjaz@matmoz.si>\n"
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 3.10\n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr "Ustvaril"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr "Ustvarjeno"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr "Določi način dodeljevanja Odoo skupin LDAP uporabnikom"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr "Definicija LDAP operacij"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr "Mapiranja skupin"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr "ID"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
"Če označeno, so vse ročne spremembe članov skupin prezrte ob vsaki prijavi "
"(tako so Odoo skupine vedno sinhrone z LDAP skupinami). Če ni, se ročno "
"dodane skupine ohranijo."
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr "LDAP atribut"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr "LDAP strežnik"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr "Zadnjič spremenjeno"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr "Zadnji posodobil"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr "Zadnjič posodobljeno"
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr "Mapiraj uporabniške skupine"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr "Odoo skupina"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr "Samo LDAP skupine"
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr "Operater"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
"LDAP atribut za preverjanje.\n"
"Za aktivni imenik uporabite memberOf."
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr "Odoo skupina za dodelitev"
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
"Operater za primerjavo atributa z vrednostjo\n"
"za aktivni imenik, uporabite 'contains'"
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
"Vrednost za primerjavo atributa.\n"
"Za aktivni imenik uporabite dn željene skupine"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr "Vrednost"
#~ msgid "Users"
#~ msgstr "Uporabniki"
#~ msgid "res.company.ldap"
#~ msgstr "res.company.ldap"
#~ msgid "res.company.ldap.group_mapping"
#~ msgstr "res.company.ldap.group_mapping"
#~ msgid "OpenERP group"
#~ msgstr "OpenERP skupine"

View file

@ -0,0 +1,157 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * users_ldap_groups
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap
msgid "Company LDAP configuration"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_uid
msgid "Created by"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__create_date
msgid "Created on"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Define how Odoo groups are assigned to LDAP users"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_operator
msgid "Definition op LDAP operations"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__display_name
msgid "Display Name"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__group_mapping_ids
msgid "Group mappings"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__id
msgid "ID"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid ""
"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."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid "LDAP attribute"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_company_ldap_group_mapping
msgid "LDAP group mapping"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_id
msgid "LDAP server"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping____last_update
msgid "Last Modified on"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_uid
msgid "Last Updated by"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__write_date
msgid "Last Updated on"
msgstr ""
#. module: users_ldap_groups
#: model_terms:ir.ui.view,arch_db:users_ldap_groups.view_ldap_installer_form
msgid "Map User Groups"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "Odoo group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap__only_ldap_groups
msgid "Only LDAP groups"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid "Operator"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__ldap_attribute
msgid ""
"The LDAP attribute to check.\n"
"For active directory, use memberOf."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__group_id
msgid "The Odoo group to assign"
msgstr ""
#. module: users_ldap_groups
#. odoo-python
#: code:addons/users_ldap_groups/models/res_company_ldap.py:0
#, python-format
msgid ""
"The created user needs to have one (and only one) of the 'User types /' "
"groups defined."
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__operator
msgid ""
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,help:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid ""
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model,name:users_ldap_groups.model_res_users
msgid "User"
msgstr ""
#. module: users_ldap_groups
#: model:ir.model.fields,field_description:users_ldap_groups.field_res_company_ldap_group_mapping__value
msgid "Value"
msgstr ""

View file

@ -0,0 +1,5 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import res_company_ldap
from . import res_company_ldap_operator
from . import res_company_ldap_group_mapping
from . import res_users

View file

@ -0,0 +1,72 @@
# Copyright 2012-2018 Therp BV <https://therp.nl>
# Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
# Copyright 2021 Tecnativa - João Marques
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from logging import getLogger
from odoo import _, api, fields, models
from odoo.exceptions import UserError
_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()._get_or_create_user(conf, login, ldap_entry)
if not user_id:
return user_id
this = self.browse(conf["id"])
SudoUser = self.env["res.users"].sudo().with_context(no_reset_password=True)
user = SudoUser.browse(user_id)
essential_groups = [
self.env.ref("base.group_user").id,
self.env.ref("base.group_portal").id,
self.env.ref("base.group_public").id,
]
groups = []
if this.only_ldap_groups:
_logger.debug("deleting all groups from user %d", user_id)
groups.append((5, False, False))
for mapping in this.group_mapping_ids:
operator = getattr(op_obj, f"_{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,
)
groups.append((4, mapping.group_id.id, False))
if (
this.only_ldap_groups
and len([g[1] for g in groups if g[0] == 4 and g[1] in essential_groups])
!= 1
):
raise UserError(
_(
"The created user needs to have one (and only one) of the"
" 'User types /' groups defined."
)
)
user.write({"groups_id": groups})
return user_id

View file

@ -0,0 +1,42 @@
# Copyright 2012-2018 Therp BV <https://therp.nl>
# Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ResCompanyLdapGroupMapping(models.Model):
_name = "res.company.ldap.group_mapping"
_description = "LDAP group mapping"
_rec_name = "ldap_attribute"
_order = "ldap_attribute"
ldap_id = fields.Many2one(
"res.company.ldap",
"LDAP server",
required=True,
ondelete="cascade",
)
ldap_attribute = fields.Char(
"LDAP attribute",
help=("The LDAP attribute to check.\nFor active directory, use memberOf."),
)
operator = fields.Selection(
lambda self: [
(o, o) for o in self.env["res.company.ldap.operator"].operators()
],
help=(
"The operator to check the attribute against the value\n"
"For active directory, use 'contains'"
),
required=True,
)
value = fields.Char(
help=(
"The value to check the attribute against.\n"
"For active directory, use the dn of the desired group"
),
required=True,
)
group_id = fields.Many2one(
"res.groups", "Odoo group", help="The Odoo group to assign", required=True
)

View file

@ -0,0 +1,59 @@
# Copyright 2012-2018 Therp BV <https://therp.nl>
# Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import base64
from logging import getLogger
from string import Template
from odoo import api, models
_logger = getLogger(__name__)
class ResCompanyLdapOperator(models.AbstractModel):
"""Define operators for group mappings"""
_name = "res.company.ldap.operator"
_description = "Definition op LDAP operations"
@api.model
def operators(self):
"""Return names (without '_') of function to call on this model as operator"""
return ("contains", "equals", "query")
def _contains(self, ldap_entry, mapping):
return mapping.ldap_attribute in ldap_entry[1] and mapping.value in map(
lambda x: x.decode(), ldap_entry[1][mapping.ldap_attribute]
)
def _equals(self, ldap_entry, mapping):
return mapping.ldap_attribute in ldap_entry[1] and mapping.value == str(
list(map(lambda x: x.decode(), ldap_entry[1][mapping.ldap_attribute]))
)
def _query(self, ldap_entry, mapping):
query_string = Template(mapping.value).safe_substitute(
{
attr: self.safe_ldap_decode(ldap_entry[1][attr][0])
for attr in ldap_entry[1]
}
)
results = mapping.ldap_id._query(mapping.ldap_id.read()[0], query_string)
_logger.debug('Performed LDAP query "%s" results: %s', query_string, results)
return bool(results)
def safe_ldap_decode(self, attr):
"""Safe LDAP decode; Base64 encode attributes containing binary data.
Binary data can be stored in Active Directory, e.g., thumbnailPhoto is
stored as binary. As Str.decoce() cannot handle binary, this method
Base64 encodes the data in the attribute, instead, if decode fails.
Using Base64 should be a suitable fallback, because the use cases of
users_ldap_groups do not really require comparing binary attributes.
"""
try:
return attr.decode()
except UnicodeDecodeError:
return base64.b64encode(attr)

View file

@ -0,0 +1,27 @@
# Copyright 2018 Therp BV <https://therp.nl>
# Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import SUPERUSER_ID, api, models, registry
class ResUsers(models.Model):
_inherit = "res.users"
@classmethod
def _login(cls, db, login, password, user_agent_env):
user_id = super()._login(db, login, password, user_agent_env)
if not user_id:
return user_id
with registry(db).cursor() as cr:
env = api.Environment(cr, SUPERUSER_ID, {})
user = env["res.users"].browse(user_id)
# check if this user came from ldap, rerun get_or_create_user in
# this case to apply ldap groups if necessary
ldaps = user.company_id.ldaps
if user.active and any(ldaps.mapped("only_ldap_groups")):
for conf in ldaps._get_ldap_dicts():
entry = ldaps._authenticate(conf, login, password)
if entry:
ldaps._get_or_create_user(conf, login, entry)
break
return user_id

View file

@ -0,0 +1,10 @@
* Holger Brunn <hbrunn@therp.nl>
* Giacomo Spettoli <giacomo.spettoli@gmail.com>
* `CorporateHub <https://corporatehub.eu/>`__
* Alexey Pelykh <alexey.pelykh@corphub.eu>
* Tecnativa <https://www.tecnativa.com>
* João Marques
* Carolina Fernandez
* Dhara Solanki <dhara.solanki@initos.com>

View file

@ -0,0 +1,5 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: https://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
Adds user accounts to groups based on rules defined by the administrator.

View file

@ -0,0 +1,16 @@
Define mappings in Settings / General Settings / Integrations / LDAP Authentication / LDAP Server
Decide whether you want only groups mapped from LDAP (`Only LDAP groups` checked) or a mix of manually set groups and LDAP groups (`Only LDAP groups` unchecked).
Setting this to "no" will result in users never losing privileges when you remove them from a LDAP group, so that's a potential security issue.
It is still the default to prevent losing group information by accident.
If set to "Yes", you need to make sure each user has at least on of the "User types" groups
For active directory, use LDAP attribute 'memberOf' and operator 'contains'. Fill in the DN of the windows group as value and choose an Odoo group users with this windows group are to be assigned to.
For posix accounts, use operator 'query' and a value like::
(&(cn=bzr)(objectClass=posixGroup)(memberUid=$uid))
The operator query matches if the filter in value returns something, and value
can contain ``$attribute`` which will be replaced by the first value of the
user's LDAP record's attribute named `attribute`.

View file

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_res_company_ldap_groups,res_company_ldap_groups,model_res_company_ldap_group_mapping,base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_res_company_ldap_groups res_company_ldap_groups model_res_company_ldap_group_mapping base.group_system 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,454 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>LDAP groups assignment</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="ldap-groups-assignment">
<h1 class="title">LDAP groups assignment</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e9016a5e491a0652aa384dd8c4e7ecf8d1091a4d7895f1b720d9a7b84814ab10
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-auth/tree/16.0/users_ldap_groups"><img alt="OCA/server-auth" src="https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-users_ldap_groups"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-auth&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<a class="reference external image-reference" href="https://www.gnu.org/licenses/agpl">
<img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" />
</a>
<p>Adds user accounts to groups based on rules defined by the administrator.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>Define mappings in Settings / General Settings / Integrations / LDAP Authentication / LDAP Server</p>
<p>Decide whether you want only groups mapped from LDAP (<cite>Only LDAP groups</cite> checked) or a mix of manually set groups and LDAP groups (<cite>Only LDAP groups</cite> unchecked).
Setting this to “no” will result in users never losing privileges when you remove them from a LDAP group, so thats a potential security issue.
It is still the default to prevent losing group information by accident.
If set to “Yes”, you need to make sure each user has at least on of the “User types” groups</p>
<p>For active directory, use LDAP attribute memberOf and operator contains. Fill in the DN of the windows group as value and choose an Odoo group users with this windows group are to be assigned to.</p>
<p>For posix accounts, use operator query and a value like:</p>
<pre class="literal-block">
(&amp;(cn=bzr)(objectClass=posixGroup)(memberUid=$uid))
</pre>
<p>The operator query matches if the filter in value returns something, and value
can contain <tt class="docutils literal">$attribute</tt> which will be replaced by the first value of the
users LDAP records attribute named <cite>attribute</cite>.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-auth/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/server-auth/issues/new?body=module:%20users_ldap_groups%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>Therp BV</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Holger Brunn &lt;<a class="reference external" href="mailto:hbrunn&#64;therp.nl">hbrunn&#64;therp.nl</a>&gt;</li>
<li>Giacomo Spettoli &lt;<a class="reference external" href="mailto:giacomo.spettoli&#64;gmail.com">giacomo.spettoli&#64;gmail.com</a>&gt;</li>
<li><a class="reference external" href="https://corporatehub.eu/">CorporateHub</a><ul>
<li>Alexey Pelykh &lt;<a class="reference external" href="mailto:alexey.pelykh&#64;corphub.eu">alexey.pelykh&#64;corphub.eu</a>&gt;</li>
</ul>
</li>
<li>Tecnativa &lt;<a class="reference external" href="https://www.tecnativa.com">https://www.tecnativa.com</a>&gt;<ul>
<li>João Marques</li>
<li>Carolina Fernandez</li>
</ul>
</li>
<li>Dhara Solanki &lt;<a class="reference external" href="mailto:dhara.solanki&#64;initos.com">dhara.solanki&#64;initos.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-auth/tree/16.0/users_ldap_groups">OCA/server-auth</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import test_users_ldap_groups

View file

@ -0,0 +1,294 @@
# Copyright 2018 Therp BV <https://therp.nl>
# Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from contextlib import contextmanager
from unittest import mock
from odoo.exceptions import UserError
from odoo.tests.common import TransactionCase
_auth_ldap_ns = "odoo.addons.auth_ldap"
_company_ldap_class = _auth_ldap_ns + ".models.res_company_ldap.CompanyLDAP"
@contextmanager
def mock_cursor(cr):
with mock.patch("odoo.sql_db.Connection.cursor") as mocked_cursor_call:
org_close = cr.close
org_autocommit = cr.autocommit
try:
cr.close = mock.Mock()
cr.autocommit = mock.Mock()
cr.commit = mock.Mock()
mocked_cursor_call.return_value = cr
yield
finally:
cr.close = org_close
cr.autocommit = org_autocommit
class FakeLdapConnection(object):
def __init__(self, entries):
self.entries = entries
def simple_bind_s(self, dn, passwd):
pass
def search_st(self, dn, scope, ldap_filter, attributes, timeout):
if dn in self.entries:
return [(dn, dict(self.entries[dn]))]
return []
def unbind(self):
pass
def unbind_s(self):
pass
def __getattr__(self, name):
def wrapper():
raise Exception("'%s' is not mocked" % name)
return wrapper
class TestUsersLdapGroups(TransactionCase):
def setUp(self):
super().setUp()
self.group_system = self.env.ref("base.group_system")
self.group_user = self.env.ref("base.group_user")
self.group_contains = self.env["res.groups"].create({"name": "contains"})
self.group_equals = self.env["res.groups"].create({"name": "equals"})
self.group_query = self.env["res.groups"].create({"name": "query"})
def _create_ldap_config(self, groups, only_ldap_groups=False, cr=None):
vals = {
"company": self.env.ref("base.main_company").id,
"ldap_base": "dc=users_ldap_groups,dc=example,dc=com",
"ldap_filter": "(uid=%s)",
"ldap_binddn": "cn=bind,dc=example,dc=com",
"create_user": True,
"only_ldap_groups": only_ldap_groups,
"group_mapping_ids": [(0, 0, group) for group in groups],
}
return self.env["res.company.ldap"].create(vals)
def test_users_ldap_groups_only_true(self):
self._create_ldap_config(
groups=[
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello3",
"group_id": self.group_system.id,
},
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello",
"group_id": self.group_user.id,
},
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello2",
"group_id": self.group_contains.id,
},
{
"ldap_attribute": "name",
"operator": "equals",
"value": "hello",
"group_id": self.group_equals.id,
},
{
"ldap_attribute": "",
"operator": "query",
"value": "is not run because of patching",
"group_id": self.group_query.id,
},
],
only_ldap_groups=True,
)
# _login does its work in a new cursor, so we need to mock it
with mock.patch(
_company_ldap_class + "._connect",
return_value=FakeLdapConnection(
{
"dc=users_ldap_groups,dc=example,dc=com": {
"cn": [b"User Name"],
"name": [b"hello", b"hello2"],
}
}
),
), mock_cursor(self.cr):
user_id = (
self.env["res.users"]
.sudo()
.authenticate(
self.env.cr.dbname, "users_ldap_groups-username", "password", {}
)
)
# this asserts group mappings from demo data
user = self.env["res.users"].sudo().browse(user_id)
groups = user.groups_id
self.assertIn(self.group_contains, groups)
self.assertIn(self.group_user, groups)
self.assertNotIn(self.group_equals, groups)
self.assertIn(self.group_query, groups)
self.assertNotIn(self.group_system, groups)
def test_users_ldap_groups_only_false(self):
self._create_ldap_config(
groups=[
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello2",
"group_id": self.group_contains.id,
},
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello",
"group_id": self.group_equals.id,
},
],
only_ldap_groups=False,
)
with mock.patch(
_company_ldap_class + "._connect",
return_value=FakeLdapConnection(
{
"dc=users_ldap_groups,dc=example,dc=com": {
"cn": [b"User Name"],
"name": [b"hello", b"hello2"],
}
}
),
), mock_cursor(self.cr):
user_id = (
self.env["res.users"]
.sudo()
.authenticate(
self.env.cr.dbname, "users_ldap_groups-username", "password", {}
)
)
# this asserts group mappings from demo data
user = self.env["res.users"].sudo().browse(user_id)
groups = user.groups_id
self.assertIn(self.group_contains, groups)
self.assertIn(self.group_equals, groups)
self.assertGreater(len(groups), 2) # user should keep default groups
def _test_users_ldap_groups_not_user_type(self):
self._create_ldap_config(
groups=[
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello3",
"group_id": self.group_system.id,
},
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello2",
"group_id": self.group_contains.id,
},
{
"ldap_attribute": "name",
"operator": "equals",
"value": "hello",
"group_id": self.group_equals.id,
},
{
"ldap_attribute": "",
"operator": "query",
"value": "is not run because of patching",
"group_id": self.group_query.id,
},
],
only_ldap_groups=True,
)
with mock.patch(
_company_ldap_class + "._connect",
return_value=FakeLdapConnection(
{
"dc=users_ldap_groups,dc=example,dc=com": {
"cn": [b"User Name"],
"name": [b"hello", b"hello2"],
}
}
),
), mock_cursor(self.cr):
with self.assertRaises(UserError):
self.env["res.users"].sudo().authenticate(
self.env.cr.dbname, "users_ldap_groups-username", "password", {}
)
def test_users_ldap_groups_ldap_returns_binary_data(self):
self._create_ldap_config(
groups=[
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello3",
"group_id": self.group_system.id,
},
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello",
"group_id": self.group_user.id,
},
{
"ldap_attribute": "name",
"operator": "contains",
"value": "hello2",
"group_id": self.group_contains.id,
},
{
"ldap_attribute": "name",
"operator": "equals",
"value": "hello",
"group_id": self.group_equals.id,
},
{
"ldap_attribute": "",
"operator": "query",
"value": "is not run because of patching",
"group_id": self.group_query.id,
},
],
only_ldap_groups=True,
)
with mock.patch(
_company_ldap_class + "._connect",
return_value=FakeLdapConnection(
{
"dc=users_ldap_groups,dc=example,dc=com": {
"cn": [b"User Name"],
"name": [b"hello", b"hello2"],
"thumbnailPhoto": [
b"GIF89a\x01\x00\x01\x00\x00\xff\x00,"
b"\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x00;"
],
}
}
),
), mock_cursor(self.cr):
user_id = (
self.env["res.users"]
.sudo()
.authenticate(
self.env.cr.dbname, "users_ldap_groups-username", "password", {}
)
)
# this asserts group mappings from demo data
user = self.env["res.users"].sudo().browse(user_id)
groups = user.groups_id
self.assertIn(self.group_contains, groups)
self.assertIn(self.group_user, groups)
self.assertNotIn(self.group_equals, groups)
self.assertIn(self.group_query, groups)
self.assertNotIn(self.group_system, groups)

View file

@ -0,0 +1,32 @@
<?xml version="1.0" ?>
<odoo>
<!--
Copyright 2018 Therp BV <https://therp.nl>
Copyright 2018 Brainbean Apps <https://brainbeanapps.com>
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
-->
<record id="view_ldap_installer_form" model="ir.ui.view">
<field name="name">res.company.ldap.form</field>
<field name="model">res.company.ldap</field>
<field name="inherit_id" ref="auth_ldap.view_ldap_installer_form" />
<field name="arch" type="xml">
<xpath expr="//group/field[@name='ldap_server']/../..">
<group string="Map User Groups">
<field name="only_ldap_groups" />
<label for="group_mapping_ids" />
<field name="group_mapping_ids" nolabel="1">
<tree editable="bottom">
<field
name="ldap_attribute"
attrs="{'required': [('operator','not in',['query'])], 'readonly': [('operator','in',['query'])]}"
/>
<field name="operator" />
<field name="value" />
<field name="group_id" />
</tree>
</field>
</group>
</xpath>
</field>
</record>
</odoo>