11# Copyright 2021-2024 Therp B.V.
22# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
33
4- from odoo import api , fields , models
4+ from odoo import fields , models
55
66
77class AuditlogLineAccessRule (models .Model ):
@@ -23,96 +23,3 @@ class AuditlogLineAccessRule(models.Model):
2323 "auditlog.rule" , "auditlog_access_rule_ids" , readonly = True , ondelete = "cascade"
2424 )
2525 state = fields .Selection (related = "auditlog_rule_id.state" , readonly = True )
26-
27- def needs_rule (self ):
28- self .ensure_one ()
29- return bool (self .group_ids )
30-
31- def get_linked_rules (self ):
32- return self .env ["ir.rule" ].search (
33- [("auditlog_line_access_rule_id" , "in" , self .ids )]
34- )
35-
36- def unlink (self ):
37- to_delete = self .get_linked_rules ()
38- res = super (AuditlogLineAccessRule , self ).unlink ()
39- if res :
40- res = res and to_delete .unlink ()
41- return res
42-
43- def add_default_group_if_needed (self ):
44- self .ensure_one ()
45- res = False
46- if not self .group_ids and self .field_ids :
47- res = self .with_context (no_iter = True ).write (
48- {"group_ids" : [(6 , 0 , [self .env .ref ("base.group_user" ).id ])]}
49- )
50- return res
51-
52- @api .model_create_multi
53- def create (self , vals ):
54- res = super (AuditlogLineAccessRule , self ).create (vals )
55- res .add_default_group_if_needed ()
56- res .regenerate_rules ()
57- return res
58-
59- def write (self , vals ):
60- res = super (AuditlogLineAccessRule , self ).write (vals )
61- for this in self :
62- added = this .add_default_group_if_needed ()
63- if (
64- any (
65- [
66- x in vals
67- for x in ("group_ids" , "field_ids" , "model_id" , "all_fields" )
68- ]
69- )
70- or added
71- ):
72- this .regenerate_rules ()
73-
74- return res
75-
76- def remove_rules (self ):
77- for this in self :
78- this .get_linked_rules ().unlink ()
79-
80- def regenerate_rules (self ):
81- for this in self :
82- this .remove_rules ()
83- dict_values = this ._prepare_rule_values ()
84- for values in dict_values :
85- self .env ["ir.rule" ].create (values )
86-
87- def _prepare_rule_values (self ):
88- self .ensure_one ()
89- if not self .needs_rule ():
90- return []
91- domain_force = "[" + " ('log_id.model_id' , '=', %s)," % (self .model_id .id )
92- if self .field_ids :
93- domain_force = "[('field_id', 'in', %s)]" % (self .field_ids .ids )
94- model = self .env .ref ("auditlog.model_auditlog_log_line" )
95- else :
96- domain_force = "[('model_id', '=', %s)]" % (self .model_id .id )
97- model = self .env .ref ("auditlog.model_auditlog_log" )
98- auditlog_security_group = self .env .ref (
99- "auditlog_security.group_can_view_audit_logs"
100- )
101- return [
102- {
103- "name" : "auditlog_extended_%s" % self .id ,
104- "model_id" : model .id ,
105- "groups" : [(6 , 0 , self .group_ids .ids )],
106- "perm_read" : True ,
107- "domain_force" : domain_force ,
108- "auditlog_line_access_rule_id" : self .id ,
109- },
110- {
111- "name" : "auditlog_extended_%s" % self .id ,
112- "model_id" : model .id ,
113- "groups" : [(6 , 0 , [auditlog_security_group .id ])],
114- "perm_read" : True ,
115- "domain_force" : [(1 , "=" , 1 )],
116- "auditlog_line_access_rule_id" : self .id ,
117- },
118- ]
0 commit comments