mirror of
https://github.com/OCA/server-backend.git
synced 2025-02-18 09:52:42 +02:00
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
# Copyright 2023 Hunki Enterprises BV
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)
|
|
|
|
|
|
from odoo import fields, models
|
|
|
|
|
|
class ResUsersEffectivePermission(models.TransientModel):
|
|
_name = "res.users.effective.permission"
|
|
_order = "model_human_name"
|
|
_description = "Effective permissions"
|
|
|
|
model_id = fields.Many2one("ir.model", string="Model")
|
|
model_name = fields.Char(related="model_id.model", string="Model name")
|
|
model_human_name = fields.Char(
|
|
related="model_id.name", store=True, string="Human readable model name"
|
|
)
|
|
create_permission = fields.Boolean("Create")
|
|
create_domain = fields.Char("Create restrictions")
|
|
create_domain_widget = fields.Char(related="create_domain", string="Create domain")
|
|
read_permission = fields.Boolean("Read")
|
|
read_domain = fields.Char("Read restrictions")
|
|
read_domain_widget = fields.Char(related="read_domain", string="Read domain")
|
|
write_permission = fields.Boolean("Write")
|
|
write_domain = fields.Char("Write restrictions")
|
|
write_domain_widget = fields.Char(related="write_domain", string="Write domain")
|
|
unlink_permission = fields.Boolean("Delete")
|
|
unlink_domain = fields.Char("Delete restrictions")
|
|
unlink_domain_widget = fields.Char(related="unlink_domain", string="Delete domain")
|
|
|
|
def _generate_permissions(self, user):
|
|
permissions = self.browse([])
|
|
operations = ("create", "unlink", "read", "write")
|
|
IrRule = (
|
|
self.env["ir.rule"]
|
|
.with_user(user)
|
|
.with_company(user.company_id)
|
|
.with_context(
|
|
allowed_company_ids=user.company_id.ids,
|
|
)
|
|
)
|
|
for model_record in self.env["ir.model"].search([]):
|
|
if model_record.model not in self.env:
|
|
continue
|
|
model = (
|
|
self.env[model_record.model]
|
|
.with_user(user)
|
|
.with_company(user.company_id)
|
|
.with_context(allowed_company_ids=user.company_id.ids)
|
|
)
|
|
vals = {"model_id": model_record.id}
|
|
vals.update(
|
|
{
|
|
"%s_permission"
|
|
% operation: model.check_access_rights(operation, False)
|
|
for operation in operations
|
|
}
|
|
)
|
|
vals.update(
|
|
{
|
|
"%s_domain"
|
|
% operation: IrRule._compute_domain(model._name, operation)
|
|
for operation in operations
|
|
}
|
|
)
|
|
permissions += self.create(vals)
|
|
return permissions
|