From fe00f4c31928e22875f36f2f9998df49c2c7fa43 Mon Sep 17 00:00:00 2001
From: Giovanni Francesco Capalbo
Date: Mon, 11 Apr 2022 11:36:15 +0200
Subject: [PATCH 01/30] [ADD] pre-review version
---
auditlog/:w | 13 ++
auditlog/models/rule.py | 2 +
auditlog/views/auditlog_view.xml | 2 +-
auditlog_security/README.rst | 112 +++++++++++++++++
auditlog_security/__init__.py | 3 +
auditlog_security/__manifest__.py | 21 ++++
auditlog_security/demo/auditlog_rule.xml | 10 ++
auditlog_security/models/__init__.py | 5 +
.../models/auditlog_autovacuum.py | 14 +++
auditlog_security/models/auditlog_rule.py | 71 +++++++++++
auditlog_security/models/ir_rule.py | 52 ++++++++
auditlog_security/readme/CONTRIBUTORS.rst | 1 +
auditlog_security/readme/CREDITS.rst | 0
auditlog_security/readme/DESCRIPTION.rst | 3 +
auditlog_security/readme/ROADMAP.rst | 1 +
auditlog_security/readme/USAGE.rst | 10 ++
.../security/ir.model.access.csv | 3 +
auditlog_security/views/auditlog_view.xml | 114 ++++++++++++++++++
18 files changed, 436 insertions(+), 1 deletion(-)
create mode 100644 auditlog/:w
create mode 100644 auditlog_security/README.rst
create mode 100644 auditlog_security/__init__.py
create mode 100644 auditlog_security/__manifest__.py
create mode 100644 auditlog_security/demo/auditlog_rule.xml
create mode 100644 auditlog_security/models/__init__.py
create mode 100644 auditlog_security/models/auditlog_autovacuum.py
create mode 100644 auditlog_security/models/auditlog_rule.py
create mode 100644 auditlog_security/models/ir_rule.py
create mode 100644 auditlog_security/readme/CONTRIBUTORS.rst
create mode 100644 auditlog_security/readme/CREDITS.rst
create mode 100644 auditlog_security/readme/DESCRIPTION.rst
create mode 100644 auditlog_security/readme/ROADMAP.rst
create mode 100644 auditlog_security/readme/USAGE.rst
create mode 100644 auditlog_security/security/ir.model.access.csv
create mode 100644 auditlog_security/views/auditlog_view.xml
diff --git a/auditlog/:w b/auditlog/:w
new file mode 100644
index 00000000000..8b489702eb1
--- /dev/null
+++ b/auditlog/:w
@@ -0,0 +1,13 @@
+# Copyright 2021 Therp B.V.
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import models, api
+
+
+class AuditlogAutovacuum(models.TransientModel):
+ _inherit = 'auditlog.autovacuum'
+
+ @api.model
+ def autovaccum(self, days):
+ return super(AuditlogAutovacuum, self.with_context(
+ auditlog_write=True)).autovacuum(days=days)
diff --git a/auditlog/models/rule.py b/auditlog/models/rule.py
index 6cdc7233ccd..e7a3c8f6492 100644
--- a/auditlog/models/rule.py
+++ b/auditlog/models/rule.py
@@ -449,6 +449,8 @@ def _create_log_line_on_write(
self, log, fields_list, old_values, new_values):
"""Log field updated on a 'write' operation."""
log_line_model = self.env['auditlog.log.line']
+ import pudb
+ pudb.set_trace()
for field_name in fields_list:
if field_name in FIELDS_BLACKLIST:
continue
diff --git a/auditlog/views/auditlog_view.xml b/auditlog/views/auditlog_view.xml
index 2ec7b480896..8eaefc4e36a 100644
--- a/auditlog/views/auditlog_view.xml
+++ b/auditlog/views/auditlog_view.xml
@@ -193,7 +193,7 @@
Logs
auditlog.log
form
-
+
-
+
-
-
-
-
-
-
+ />
-
-
-
-
-
-
-
+ />
From 1896427d978897995061bf715e7b65db0817b0c5 Mon Sep 17 00:00:00 2001
From: KKamaa
Date: Tue, 5 Jul 2022 16:49:56 +0300
Subject: [PATCH 07/30] fixup! [FIX] open issues and errors
---
auditlog_security/security/ir.model.access.csv | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/auditlog_security/security/ir.model.access.csv b/auditlog_security/security/ir.model.access.csv
index c0429ab1ed7..eba2422b41f 100644
--- a/auditlog_security/security/ir.model.access.csv
+++ b/auditlog_security/security/ir.model.access.csv
@@ -1,3 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_auditlog_log_line_user,auditlog_log_line_user,auditlog.model_auditlog_log_line,base.group_user,1,0,0,0
-access_auditlog_line_access_rule_admin,auditlog_line_access_rule_admin,model_auditlog_line_access_rule,base.group_erp_manager,1,1,1,0
\ No newline at end of file
+access_auditlog_line_access_rule_admin,auditlog_line_access_rule_admin,model_auditlog_line_access_rule,base.group_erp_manager,1,1,1,1
\ No newline at end of file
From 42a3b7efddb74ad659776f33c3aa95219a83e925 Mon Sep 17 00:00:00 2001
From: Giovanni Francesco Capalbo
Date: Wed, 20 Jul 2022 15:48:09 +0200
Subject: [PATCH 08/30] [FIX] fixes points 1,3,4,7
---
auditlog_security/models/auditlog_log_line.py | 4 +-
auditlog_security/models/auditlog_rule.py | 96 +++++++++----------
auditlog_security/views/auditlog_view.xml | 3 +-
3 files changed, 50 insertions(+), 53 deletions(-)
diff --git a/auditlog_security/models/auditlog_log_line.py b/auditlog_security/models/auditlog_log_line.py
index cb6f41ff9f8..b79f6b25ba0 100644
--- a/auditlog_security/models/auditlog_log_line.py
+++ b/auditlog_security/models/auditlog_log_line.py
@@ -11,5 +11,7 @@ class AuditlogLogLine(models.Model):
user_id = fields.Many2one(
'res.users',
string="User",
- default=lambda self: self.env.user
)
+ method = fields.Char("Method", related='log_id.method')
+
+
diff --git a/auditlog_security/models/auditlog_rule.py b/auditlog_security/models/auditlog_rule.py
index 3bcd80a99e3..22eca101c96 100644
--- a/auditlog_security/models/auditlog_rule.py
+++ b/auditlog_security/models/auditlog_rule.py
@@ -3,6 +3,7 @@
from odoo import exceptions, models, fields, api, modules, _
from odoo.addons.auditlog.models.rule import FIELDS_BLACKLIST
+from odoo import SUPERUSER_ID
class AuditlogRule(models.Model):
@@ -12,6 +13,12 @@ class AuditlogRule(models.Model):
"auditlog.line.access.rule", "auditlog_rule_id", ondelete="cascade"
)
+
+ def sudo(self, user=SUPERUSER_ID):
+ return super(
+ AuditlogRule, self.with_context(real_user=self.env.context.get('uid'))
+ ).sudo(user=user)
+
@api.onchange("model_id")
def onchange_model_id(self):
# if model changes we must wipe out all field ids
@@ -25,91 +32,80 @@ def unlink(self):
lines.unlink()
return res
+ def _get_view_log_lines_action(rule):
+ rule.ensure_one()
+ domain = (
+ "[('log_id.model_id', '=', %s), ('log_id.res_id', '=', "
+ "active_id),('field_id', 'in', %s)]"
+ % (rule.model_id.id,
+ rule.auditlog_line_access_rule_ids.mapped('field_ids').ids)
+ )
+ return {
+ "name": _("View log lines"),
+ "res_model": "auditlog.log.line",
+ "src_model": rule.model_id.model,
+ "binding_model_id": rule.model_id.id,
+ "domain": domain
+ }
+
+ def _get_view_log_action(rule):
+ #small helper , not used but may be useful.
+ rule.ensure_one()
+ domain = "[('model_id', '=', %s), ('res_id', '=', active_id)]" % (
+ rule.model_id.id)
+ return {
+ 'name': _("View logs"),
+ 'res_model': 'auditlog.log',
+ 'src_model': rule.model_id.model,
+ 'binding_model_id': rule.model_id.id,
+ 'domain': domain,
+ }
+
@api.multi
def subscribe(self):
- super(AuditlogRule, self).subscribe()
act_window_model = self.env["ir.actions.act_window"]
for rule in self:
- domain = (
- "[('log_id.model_id', '=', %s), ('log_id.res_id', '=', "
- "active_id),('field_id', 'in', %s)]"
- % (rule.model_id.id,
- rule.auditlog_line_access_rule_ids.mapped('field_ids').ids)
- )
- vals = {
- "name": _("View log lines"),
- "res_model": "auditlog.log.line",
- "src_model": rule.model_id.model,
- "binding_model_id": rule.model_id.id,
- "domain": domain
- }
+ vals = rule._get_view_log_lines_action()
audit_grp_sec = self.env.ref(
'auditlog_security.group_can_view_audit_logs')
act_window = act_window_model.sudo().create(vals)
act_window.groups_id = audit_grp_sec
- domain = "[('model_id', '=', %s), ('res_id', '=', active_id)]" % (
- rule.model_id.id)
- pvals = {
- 'name': _("View logs"),
- 'res_model': 'auditlog.log',
- 'src_model': rule.model_id.model,
- 'binding_model_id': rule.model_id.id,
- 'domain': domain,
- }
- params_view = [
- ('name', '=', pvals['name']),
- ('res_model', '=', pvals['res_model']),
- ('src_model', '=', pvals['src_model']),
- ('binding_model_id', '=', pvals['binding_model_id']),
- ('domain', '=', pvals['domain'])
- ]
- act_window_view = act_window_model.search(params_view)
- for action in act_window_view:
- action.groups_id = audit_grp_sec
- rule.write({"state": "subscribed", "action_id": act_window.id})
- return True
+ return super(AuditlogRule, self).subscribe()
@api.multi
def unsubscribe(self):
act_window_model = self.env["ir.actions.act_window"]
for rule in self:
- domain = "[('model_id', '=', %s), ('res_id', '=', active_id)]" % (
- rule.model_id.id)
- vals = {
- 'name': _("View logs"),
- 'res_model': 'auditlog.log',
- 'src_model': rule.model_id.model,
- 'binding_model_id': rule.model_id.id,
- 'domain': domain,
- }
- params_view = [
+ vals = rule._get_view_log_lines_action()
+ params_view_line = [
('name', '=', vals['name']),
('res_model', '=', vals['res_model']),
('src_model', '=', vals['src_model']),
('binding_model_id', '=', vals['binding_model_id']),
('domain', '=', vals['domain'])
]
- act_window_view = act_window_model.search(params_view)
- for action in act_window_view:
+ act_window_view_line = act_window_model.search(params_view_line)
+ for action in act_window_view_line:
action.unlink()
return super(AuditlogRule, self).unsubscribe()
+
def _prepare_log_line_vals_on_read(self, log, field, read_values):
res = super(AuditlogRule, self)._prepare_log_line_vals_on_read(
log, field, read_values)
- res.update({'user_id': self.env.user.id})
+ res.update({'user_id': self.env.context.get('real_user')})
return res
def _prepare_log_line_vals_on_write(
self, log, field, old_values, new_values):
res = super(AuditlogRule, self)._prepare_log_line_vals_on_write(
log, field, old_values, new_values)
- res.update({'user_id': self.env.user.id})
+ res.update({'user_id': self.env.context.get('real_user')})
return res
def _prepare_log_line_vals_on_create(self, log, field, new_values):
res = super(AuditlogRule, self)._prepare_log_line_vals_on_create(
log, field, new_values)
- res.update({'user_id': self.env.user.id})
+ res.update({'user_id': self.env.context.get('real_user')})
return res
diff --git a/auditlog_security/views/auditlog_view.xml b/auditlog_security/views/auditlog_view.xml
index 710a0af246f..9878d485e06 100644
--- a/auditlog_security/views/auditlog_view.xml
+++ b/auditlog_security/views/auditlog_view.xml
@@ -59,7 +59,7 @@
-
+
@@ -90,7 +90,6 @@
-
Date: Thu, 21 Jul 2022 19:54:59 +0300
Subject: [PATCH 09/30] [FIX] point 2: server actions instead of window action
---
auditlog_security/models/auditlog_rule.py | 49 +++++++++++++----------
auditlog_security/views/auditlog_view.xml | 21 +++++++---
2 files changed, 43 insertions(+), 27 deletions(-)
diff --git a/auditlog_security/models/auditlog_rule.py b/auditlog_security/models/auditlog_rule.py
index 22eca101c96..ca3e0d93eda 100644
--- a/auditlog_security/models/auditlog_rule.py
+++ b/auditlog_security/models/auditlog_rule.py
@@ -12,6 +12,7 @@ class AuditlogRule(models.Model):
auditlog_line_access_rule_ids = fields.One2many(
"auditlog.line.access.rule", "auditlog_rule_id", ondelete="cascade"
)
+ server_action_id = fields.Many2one('ir.actions.server', "Server Action")
def sudo(self, user=SUPERUSER_ID):
@@ -41,15 +42,37 @@ def _get_view_log_lines_action(rule):
rule.auditlog_line_access_rule_ids.mapped('field_ids').ids)
)
return {
- "name": _("View log lines"),
+ "name": _("View Log Lines"),
"res_model": "auditlog.log.line",
"src_model": rule.model_id.model,
"binding_model_id": rule.model_id.id,
"domain": domain
}
+ def _create_server_action(self, rule):
+
+ code = """
+ if env.user.has_group("auditlog_security.group_can_view_audit_logs"):
+ rule = env['auditlog.rule'].browse(%s)
+ fields_ids = rule.auditlog_line_access_rule_ids.mapped('field_ids').ids
+ logs = env['auditlog.log'].sudo().search([('model_id', '=', rule.model_id.id), ('res_id', 'in', env.context.get('active_ids'))])
+ domain = [('log_id', 'in', logs.ids), ('field_id', 'in', fields_ids)]
+ action_values = env.ref('auditlog_security.audit_log_line_action').read()[0]
+ action = action_values
+ """ % rule.id
+ server_action = self.env['ir.actions.server'].sudo().create({
+ 'name': "View Log Lines",
+ 'model_id': rule.model_id.id,
+ 'state': "code",
+ 'code': code.strip()
+ })
+ rule.write({
+ 'server_action_id': server_action.id
+ })
+ return server_action
+
def _get_view_log_action(rule):
- #small helper , not used but may be useful.
+ #small helper , not used but may be useful.
rule.ensure_one()
domain = "[('model_id', '=', %s), ('res_id', '=', active_id)]" % (
rule.model_id.id)
@@ -63,33 +86,17 @@ def _get_view_log_action(rule):
@api.multi
def subscribe(self):
- act_window_model = self.env["ir.actions.act_window"]
for rule in self:
- vals = rule._get_view_log_lines_action()
- audit_grp_sec = self.env.ref(
- 'auditlog_security.group_can_view_audit_logs')
- act_window = act_window_model.sudo().create(vals)
- act_window.groups_id = audit_grp_sec
+ server_action = self._create_server_action(rule)
+ server_action.create_action()
return super(AuditlogRule, self).subscribe()
@api.multi
def unsubscribe(self):
- act_window_model = self.env["ir.actions.act_window"]
for rule in self:
- vals = rule._get_view_log_lines_action()
- params_view_line = [
- ('name', '=', vals['name']),
- ('res_model', '=', vals['res_model']),
- ('src_model', '=', vals['src_model']),
- ('binding_model_id', '=', vals['binding_model_id']),
- ('domain', '=', vals['domain'])
- ]
- act_window_view_line = act_window_model.search(params_view_line)
- for action in act_window_view_line:
- action.unlink()
+ rule.server_action_id.unlink()
return super(AuditlogRule, self).unsubscribe()
-
def _prepare_log_line_vals_on_read(self, log, field, read_values):
res = super(AuditlogRule, self)._prepare_log_line_vals_on_read(
log, field, read_values)
diff --git a/auditlog_security/views/auditlog_view.xml b/auditlog_security/views/auditlog_view.xml
index 9878d485e06..34fe09ec042 100644
--- a/auditlog_security/views/auditlog_view.xml
+++ b/auditlog_security/views/auditlog_view.xml
@@ -51,7 +51,6 @@
-
auditlog.log.line.tree
auditlog.log.line
@@ -69,6 +68,13 @@
+
+ View Log Lines
+ ir.actions.act_window
+ auditlog.log.line
+ tree,form
+
+
@@ -79,15 +85,18 @@
+
+
+
+ Add fields here to make any changes to them (audit log lines)
+ visible to members of the selected groups.
+
+
+
-
- Add fields here to make any changes to them (audit log lines)
- visible to members of the selected groups.
-
-
From db95a565132bf272110dcb91e9ccf60c9d9b9e93 Mon Sep 17 00:00:00 2001
From: Renzo Brown
Date: Thu, 21 Jul 2022 19:09:20 +0000
Subject: [PATCH 10/30] fixup! [FIX] point 2: server actions instead of window
action
---
.../models/auditlog_line_access_rule.py | 21 +++---
auditlog_security/models/auditlog_rule.py | 70 ++++++++-----------
2 files changed, 42 insertions(+), 49 deletions(-)
diff --git a/auditlog_security/models/auditlog_line_access_rule.py b/auditlog_security/models/auditlog_line_access_rule.py
index 597d6be7a8d..fc210e851c7 100644
--- a/auditlog_security/models/auditlog_line_access_rule.py
+++ b/auditlog_security/models/auditlog_line_access_rule.py
@@ -44,12 +44,12 @@ def get_field_ids_domain(self):
("name", "not in", FIELDS_BLACKLIST),
]
- # def unlink(self):
- # to_delete = self.get_linked_rules()
- # res = super(AuditlogLineAccessRule, self).unlink()
- # if res:
- # res = res and to_delete.with_context(auditlog_write=True).unlink()
- # return res
+ def unlink(self):
+ to_delete = self.get_linked_rules()
+ res = super(AuditlogLineAccessRule, self).unlink()
+ if res:
+ res = res and to_delete.with_context(auditlog_write=True).unlink()
+ return res
def add_default_group_if_needed(self):
self.ensure_one()
@@ -103,11 +103,14 @@ def _prepare_rule_values(self):
self.model_id.id
)
if self.field_ids:
- domain_force += "('field_id', 'in', %s)" % (self.field_ids.ids)
- domain_force += "]"
+ domain_force = "[('field_id', 'in', %s)]" % (self.field_ids.ids)
+ model = self.env.ref("auditlog.model_auditlog_log_line")
+ else:
+ domain_force = "[('model_id', '=', %s)]" % (self.model_id.id)
+ model = self.env.ref("auditlog.model_auditlog_log")
return {
"name": "auditlog_extended_%s" % self.id,
- "model_id": self.env.ref("auditlog.model_auditlog_log_line").id,
+ "model_id": model.id,
"groups": [(6, 0, self.group_ids.ids)],
"perm_read": True,
"domain_force": domain_force,
diff --git a/auditlog_security/models/auditlog_rule.py b/auditlog_security/models/auditlog_rule.py
index ca3e0d93eda..04ab70a03eb 100644
--- a/auditlog_security/models/auditlog_rule.py
+++ b/auditlog_security/models/auditlog_rule.py
@@ -33,61 +33,51 @@ def unlink(self):
lines.unlink()
return res
- def _get_view_log_lines_action(rule):
- rule.ensure_one()
- domain = (
- "[('log_id.model_id', '=', %s), ('log_id.res_id', '=', "
- "active_id),('field_id', 'in', %s)]"
- % (rule.model_id.id,
- rule.auditlog_line_access_rule_ids.mapped('field_ids').ids)
- )
- return {
+ @api.multi
+ def _get_view_log_lines_action(self):
+ self.ensure_one()
+ fields_ids = self.auditlog_line_access_rule_ids.mapped('field_ids').ids
+ logs = self.env['auditlog.log'].sudo().search([
+ ('model_id', '=', self.model_id.id),
+ ('res_id', 'in', self.env.context.get('active_ids'))
+ ])
+ print('XXX', logs.ids)
+ lines = self.env['auditlog.log.line'].sudo().search([
+ ('log_id', 'in', logs.ids), ('field_id', 'in', fields_ids)
+ ])
+ print('YYY', lines.ids)
+ return {
"name": _("View Log Lines"),
"res_model": "auditlog.log.line",
- "src_model": rule.model_id.model,
- "binding_model_id": rule.model_id.id,
- "domain": domain
+ #"src_model": self.model_id.model,
+ #"binding_model_id": self.model_id.id,
+ "view_mode": "tree,form",
+ "view_id": False,
+ "domain": [('id', 'in', lines.ids)],
+ "type": "ir.actions.act_window",
}
- def _create_server_action(self, rule):
-
- code = """
- if env.user.has_group("auditlog_security.group_can_view_audit_logs"):
- rule = env['auditlog.rule'].browse(%s)
- fields_ids = rule.auditlog_line_access_rule_ids.mapped('field_ids').ids
- logs = env['auditlog.log'].sudo().search([('model_id', '=', rule.model_id.id), ('res_id', 'in', env.context.get('active_ids'))])
- domain = [('log_id', 'in', logs.ids), ('field_id', 'in', fields_ids)]
- action_values = env.ref('auditlog_security.audit_log_line_action').read()[0]
- action = action_values
- """ % rule.id
+ @api.multi
+ def _create_server_action(self):
+ self.ensure_one()
+ code = \
+ "rule = env['auditlog.rule'].browse(%s)\n" \
+ "action = rule._get_view_log_lines_action()" % (self.id,)
server_action = self.env['ir.actions.server'].sudo().create({
'name': "View Log Lines",
- 'model_id': rule.model_id.id,
+ 'model_id': self.model_id.id,
'state': "code",
- 'code': code.strip()
+ 'code': code
})
- rule.write({
+ self.write({
'server_action_id': server_action.id
})
return server_action
- def _get_view_log_action(rule):
- #small helper , not used but may be useful.
- rule.ensure_one()
- domain = "[('model_id', '=', %s), ('res_id', '=', active_id)]" % (
- rule.model_id.id)
- return {
- 'name': _("View logs"),
- 'res_model': 'auditlog.log',
- 'src_model': rule.model_id.model,
- 'binding_model_id': rule.model_id.id,
- 'domain': domain,
- }
-
@api.multi
def subscribe(self):
for rule in self:
- server_action = self._create_server_action(rule)
+ server_action = rule._create_server_action()
server_action.create_action()
return super(AuditlogRule, self).subscribe()
From 7eff32c5250b9df0e2edf1e10b3ae2313c711873 Mon Sep 17 00:00:00 2001
From: Giovanni Francesco Capalbo
Date: Tue, 26 Jul 2022 11:14:11 +0200
Subject: [PATCH 11/30] [FIX] user_id fix, use related fields , allows for
massive cleanup too.
---
auditlog_security/models/auditlog_log_line.py | 1 +
auditlog_security/models/auditlog_rule.py | 26 -------------------
2 files changed, 1 insertion(+), 26 deletions(-)
diff --git a/auditlog_security/models/auditlog_log_line.py b/auditlog_security/models/auditlog_log_line.py
index b79f6b25ba0..076217bbc6f 100644
--- a/auditlog_security/models/auditlog_log_line.py
+++ b/auditlog_security/models/auditlog_log_line.py
@@ -10,6 +10,7 @@ class AuditlogLogLine(models.Model):
user_id = fields.Many2one(
'res.users',
+ related="log_id.user_id",
string="User",
)
method = fields.Char("Method", related='log_id.method')
diff --git a/auditlog_security/models/auditlog_rule.py b/auditlog_security/models/auditlog_rule.py
index 04ab70a03eb..59544922ad8 100644
--- a/auditlog_security/models/auditlog_rule.py
+++ b/auditlog_security/models/auditlog_rule.py
@@ -3,7 +3,6 @@
from odoo import exceptions, models, fields, api, modules, _
from odoo.addons.auditlog.models.rule import FIELDS_BLACKLIST
-from odoo import SUPERUSER_ID
class AuditlogRule(models.Model):
@@ -14,12 +13,6 @@ class AuditlogRule(models.Model):
)
server_action_id = fields.Many2one('ir.actions.server', "Server Action")
-
- def sudo(self, user=SUPERUSER_ID):
- return super(
- AuditlogRule, self.with_context(real_user=self.env.context.get('uid'))
- ).sudo(user=user)
-
@api.onchange("model_id")
def onchange_model_id(self):
# if model changes we must wipe out all field ids
@@ -87,22 +80,3 @@ def unsubscribe(self):
rule.server_action_id.unlink()
return super(AuditlogRule, self).unsubscribe()
- def _prepare_log_line_vals_on_read(self, log, field, read_values):
- res = super(AuditlogRule, self)._prepare_log_line_vals_on_read(
- log, field, read_values)
- res.update({'user_id': self.env.context.get('real_user')})
- return res
-
- def _prepare_log_line_vals_on_write(
- self, log, field, old_values, new_values):
- res = super(AuditlogRule, self)._prepare_log_line_vals_on_write(
- log, field, old_values, new_values)
- res.update({'user_id': self.env.context.get('real_user')})
- return res
-
- def _prepare_log_line_vals_on_create(self, log, field, new_values):
- res = super(AuditlogRule, self)._prepare_log_line_vals_on_create(
- log, field, new_values)
- res.update({'user_id': self.env.context.get('real_user')})
- return res
-
From 9bcce334844107f17e0358b02ee797431769a332 Mon Sep 17 00:00:00 2001
From: Giovanni Francesco Capalbo
Date: Tue, 26 Jul 2022 11:58:41 +0200
Subject: [PATCH 12/30] fixup! [FIX] user_id fix, use related fields , allows
for massive cleanup too.
---
auditlog_security/models/auditlog_rule.py | 20 +++++---------------
auditlog_security/views/auditlog_view.xml | 5 ++++-
2 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/auditlog_security/models/auditlog_rule.py b/auditlog_security/models/auditlog_rule.py
index 59544922ad8..3876d65c34c 100644
--- a/auditlog_security/models/auditlog_rule.py
+++ b/auditlog_security/models/auditlog_rule.py
@@ -18,25 +18,15 @@ def onchange_model_id(self):
# if model changes we must wipe out all field ids
self.auditlog_line_access_rule_ids.unlink()
- @api.multi
- def unlink(self):
- lines = self.mapped("auditlog_line_access_rule_ids")
- res = super(AuditlogRule, self).unlink()
- if res:
- lines.unlink()
- return res
-
- @api.multi
- def _get_view_log_lines_action(self):
- self.ensure_one()
- fields_ids = self.auditlog_line_access_rule_ids.mapped('field_ids').ids
+ @api.model
+ def _get_view_log_lines_action(self, model):
logs = self.env['auditlog.log'].sudo().search([
- ('model_id', '=', self.model_id.id),
+ ('model_id', '=', model.id),
('res_id', 'in', self.env.context.get('active_ids'))
])
print('XXX', logs.ids)
lines = self.env['auditlog.log.line'].sudo().search([
- ('log_id', 'in', logs.ids), ('field_id', 'in', fields_ids)
+ ('log_id', 'in', logs.ids)
])
print('YYY', lines.ids)
return {
@@ -55,7 +45,7 @@ def _create_server_action(self):
self.ensure_one()
code = \
"rule = env['auditlog.rule'].browse(%s)\n" \
- "action = rule._get_view_log_lines_action()" % (self.id,)
+ "action = rule._get_view_log_lines_action()" % (self.model_id,)
server_action = self.env['ir.actions.server'].sudo().create({
'name': "View Log Lines",
'model_id': self.model_id.id,
diff --git a/auditlog_security/views/auditlog_view.xml b/auditlog_security/views/auditlog_view.xml
index 34fe09ec042..433d19d9d26 100644
--- a/auditlog_security/views/auditlog_view.xml
+++ b/auditlog_security/views/auditlog_view.xml
@@ -99,12 +99,15 @@
-->
+
-
-
-
+
+
+ />
+
+
+
@@ -117,7 +128,12 @@