mirror of
https://github.com/bringout/oca-server-auth.git
synced 2026-04-19 10:52:02 +02:00
Initial commit: OCA Server Auth packages (29 packages)
This commit is contained in:
commit
3ed80311c4
1325 changed files with 127292 additions and 0 deletions
|
|
@ -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")
|
||||
Loading…
Add table
Add a link
Reference in a new issue