mirror of
https://github.com/OCA/server-backend.git
synced 2025-02-18 09:52:42 +02:00
[ADD] base_user_effective_permissions
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user