diff --git a/MetaAnalytic.py b/MetaAnalytic.py
index 92102b656827d810a9b4c5f5cfdffa78e3a357b3_TWV0YUFuYWx5dGljLnB5..701c1b30d399c60f5a950bebbf9895caf81fee5f_TWV0YUFuYWx5dGljLnB5 100644
--- a/MetaAnalytic.py
+++ b/MetaAnalytic.py
@@ -444,7 +444,8 @@
                 # inherits.
                 code_obj = self.env["analytic.code"]
                 code_vals["nd_id"] = self._get_bound_dimension_id()
-                code = code_obj.create(code_vals)
+                # These are behind-the-scenes links so bypass security rules.
+                code = code_obj.sudo().create(code_vals)
                 vals[column] = code.id
                 new_code = code
 
@@ -502,7 +503,8 @@
                 self._generate_code_ref_id(res)
 
             if new_code:
-                new_code.write(
+                # These are behind-the-scenes links so bypass security rules.
+                new_code.sudo().write(
                     {"origin_id": "{},{}".format(self._name, res.id)}
                 )
 
@@ -581,8 +583,12 @@
                         rec_code_vals["origin_id"] = "{},{}".format(
                             self._name, rec.id
                         )
-                        rec_vals[column] = code_obj.create(rec_code_vals).id
+                        # These are behind-the-scenes links so bypass security
+                        # rules.
+                        rec_vals[column] = (
+                            code_obj.sudo().create(rec_code_vals).id
+                        )
 
                         super(superclass, rec).write(rec_vals, **kwargs)
 
                     elif rec_code_vals:
@@ -585,8 +591,10 @@
 
                         super(superclass, rec).write(rec_vals, **kwargs)
 
                     elif rec_code_vals:
-                        code.write(rec_code_vals)
+                        # These are behind-the-scenes links so bypass security
+                        # rules.
+                        code.sudo().write(rec_code_vals)
 
             if code_ref_ids and news is not False:
                 for new in news:
@@ -611,7 +619,8 @@
 
             res = super(superclass, self).unlink()
 
-            codes.unlink(**kwargs)
+            # These are behind-the-scenes links so bypass security rules.
+            codes.sudo().unlink(**kwargs)
 
             return res
 
@@ -633,7 +642,8 @@
                     "analytic dimension {}".format(dimension_name)
                 )
             if code_vals:
-                force_code.write(code_vals)
+                # These are behind-the-scenes links so bypass security rules.
+                force_code.sudo().write(code_vals)
 
         if sync_parent:
             # This function is called as a method and can be overridden.