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,77 @@
# © 2021 Florian Kantelberg - initOS GmbH
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from odoo import _, api, models
from odoo.exceptions import AccessError
_logger = logging.getLogger(__name__)
class AbstractVault(models.AbstractModel):
"""Models must have the following fields:
`perm_user`: The permissions are computed for this user
`allowed_read`: The current user can read from the vault
`allowed_create`: The current user can read from the vault
`allowed_write`: The current user has write access to the vault
`allowed_share`: The current user can share the vault with other users
`allowed_delete`: The current user can delete the vault or entries of it
"""
_name = "vault.abstract"
_description = _("Abstract model to implement general access rights")
@api.model
def raise_access_error(self):
raise AccessError(
_(
"The requested operation can not be completed due to security "
"restrictions."
)
)
def check_access_rule(self, operation):
super().check_access_rule(operation)
if self.env.su:
return
# We have to recompute if the user of the environment changed
if self.env.user != self.mapped("perm_user"):
vault = self if self._name == "vault" else self.mapped("vault_id")
vault._compute_access()
# Shortcut for vault.right because only the share right is required
if self._name == "vault.right":
if not self.filtered("allowed_share"):
self.raise_access_error()
return
# Check the operation and matching permissions
if operation == "read" and not self.filtered("allowed_read"):
self.raise_access_error()
if operation == "create" and not self.filtered("allowed_create"):
self.raise_access_error()
if operation == "write" and not self.filtered("allowed_write"):
self.raise_access_error()
if operation == "unlink" and not self.filtered("allowed_delete"):
self.raise_access_error()
def _log_entry(self, msg, state):
raise NotImplementedError()
def log_entry(self, msg):
return self._log_entry(msg, None)
def log_info(self, msg):
return self._log_entry(msg, "info")
def log_warn(self, msg):
return self._log_entry(msg, "warn")
def log_error(self, msg):
return self._log_entry(msg, "error")