2 Exercise ir_rule.py code (and indirectly expression.py).
4 Create an ir_rule for the Employee group (called base.group_user)
7 !record {model: ir.rule, id: test_rule}:
8 model_id: base.model_res_partner
18 Read as demo user the partners (one blank domain).
20 !python {model: res.partner }: |
21 ids = self.search(cr, ref('base.user_demo'), [])
22 assert ids, "Demo user should see some partner."
26 !record {model: ir.rule, id: test_rule}:
27 model_id: base.model_res_partner
28 domain_force: "[(1,'=',1)]"
30 Read as demo user the partners (one 1=1 domain).
32 !python {model: res.partner }: |
33 ids = self.search(cr, ref('base.user_demo'), [])
34 assert ids, "Demo user should see some partner."
36 Domain is an empty list.
38 !record {model: ir.rule, id: test_rule}:
39 model_id: base.model_res_partner
42 Read as demo user the partners (one [] domain).
44 !python {model: res.partner }: |
45 ids = self.search(cr, ref('base.user_demo'), [])
46 assert ids, "Demo user should see some partner."
48 Create another ir_rule for the Employee group (to test rules from
51 !record {model: ir.rule, id: test_rule2}:
52 model_id: base.model_res_partner
62 Read as demo user the partners (blank and [] domains).
64 !python {model: res.partner }: |
65 ids = self.search(cr, ref('base.user_demo'), [])
66 assert ids, "Demo user should see some partner."
70 !record {model: ir.rule, id: test_rule}:
71 model_id: base.model_res_partner
72 domain_force: "[(1,'=',1)]"
74 Read as demo user the partners (1=1 and blank domain).
76 !python {model: res.partner }: |
77 ids = self.search(cr, ref('base.user_demo'), [])
78 assert ids, "Demo user should see some partner."
82 !record {model: ir.rule, id: test_rule2}:
83 model_id: base.model_res_partner
84 domain_force: "[(1,'=',1)]"
86 Read as demo user the partners (two 1=1 domains).
88 !python {model: res.partner }: |
89 ids = self.search(cr, ref('base.user_demo'), [])
90 assert ids, "Demo user should see some partner."
92 Create another ir_rule for the Employee group (to test rules from
95 !record {model: ir.rule, id: test_rule3}:
96 model_id: base.model_res_partner
106 Read as demo user the partners.
108 !python {model: res.partner }: |
109 ids = self.search(cr, ref('base.user_demo'), [])
110 assert ids, "Demo user should see some partner."
114 !record {model: ir.rule, id: test_rule3}:
115 model_id: base.model_res_partner
116 domain_force: "[(1,'=',1)]"
118 Read as demo user the partners (three 1=1 domains).
120 !python {model: res.partner }: |
121 ids = self.search(cr, ref('base.user_demo'), [])
122 assert ids, "Demo user should see some partner."
124 Modify the global rule on res_company which triggers a recursive check
125 of the rules on company.
127 !record {model: ir.rule, id: base.res_company_rule}:
128 domain_force: "[('id','child_of',[user.company_id.id])]"
130 Read as demo user the partners (exercising the global company rule).
132 !python {model: res.partner }: |
133 ids = self.search(cr, ref('base.user_demo'), [])
134 assert ids, "Demo user should see some partner."
136 Modify the ir_rule for employee to have a rule that fordids
138 We use a domain with implicit AND operator for later tests
141 !record {model: ir.rule, id: test_rule2}:
142 domain_force: "[('id','=',False),('name','=',False)]"
144 Check that demo user still sees partners, because group-rules are OR'ed.
146 !python {model: res.partner }: |
147 ids = self.search(cr, ref('base.user_demo'), [])
148 assert ids, "Demo user should see some partner."
150 Create a new group with demo user in it, and a complex rule.
151 Demo should still see partners.
153 !record {model: res.groups, id: test_group}:
158 Add the rule to the new group, with a domain containing an implicit AND operator,
159 which is more tricky because it will have to be normalized before combining it.
161 !record {model: ir.rule, id: test_rule3}:
162 model_id: base.model_res_partner
163 domain_force: "[('name', '!=', False),('id', '!=', False)]"
172 Read the partners again as demo user, which should give results.
174 !python {model: res.partner }: |
175 ids = self.search(cr, ref('base.user_demo'), [])
176 assert ids, "Demo user should see partners even with the combined rules."
178 Delete global domains (to combine only group domains).
180 !python {model: ir.rule}: |
181 ids = self.search(cr, uid, [('groups','=',False)])
182 assert ids, "Demo user should see some partner."
183 self.unlink(cr, uid, ids)
185 Read as demo user the partners (several group domains, no global domain).
187 !python {model: res.partner }: |
188 ids = self.search(cr, ref('base.user_demo'), [])
189 assert ids, "Demo user should see some partner."