Skip to content

Commit fb37d63

Browse files
committed
[FIX] dms: fix access rules for beter security
1 parent 2b8ffdf commit fb37d63

File tree

4 files changed

+65
-9
lines changed

4 files changed

+65
-9
lines changed

dms/controllers/portal.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ def _get_files(self, access_token, dms_directory_id, search, search_in, sort_br)
177177
file_domain = [
178178
("is_hidden", "=", False),
179179
("directory_id", "=", dms_directory_id),
180+
(
181+
"message_partner_ids",
182+
"child_of",
183+
[request.env.user.commercial_partner_id.id],
184+
),
180185
]
181186
# search
182187
if search and search_in == "name":
@@ -206,7 +211,15 @@ def _get_directories(
206211
:rtype: tuple[odoo.model.dms_directory, bool|odoo.model.dms_directory]
207212
"""
208213
# domain
209-
domain = [("is_hidden", "=", False), ("parent_id", "=", dms_directory_id)]
214+
domain = [
215+
("is_hidden", "=", False),
216+
("parent_id", "=", dms_directory_id),
217+
(
218+
"file_ids.message_partner_ids",
219+
"child_of",
220+
[request.env.user.commercial_partner_id.id],
221+
),
222+
]
210223
# search
211224
if search and search_in:
212225
domain.append(("name", "ilike", search))

dms/security/ir.model.access.csv

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,14 @@ access_dms_storage_portal,dms_storage_portal,model_dms_storage,base.group_portal
88
access_dms_storage_user,dms_storage_user,model_dms_storage,group_dms_user,1,0,0,0
99
access_dms_storage_manager,dms_storage_manager,model_dms_storage,group_dms_manager,1,1,1,1
1010

11-
access_dms_directory_public,dms_directory_public,model_dms_directory,base.group_public,1,0,0,0
1211
access_dms_directory_portal,dms_directory_portal,model_dms_directory,base.group_portal,1,0,0,0
1312
access_dms_directory_base_user,dms_directory_base_user,model_dms_directory,base.group_user,1,0,0,0
1413
access_dms_directory_user,dms_directory_user,model_dms_directory,group_dms_user,1,1,1,1
1514

16-
access_dms_file_public,dms_file_public,model_dms_file,base.group_public,1,0,0,0
1715
access_dms_file_portal,dms_file_portal,model_dms_file,base.group_portal,1,0,0,0
1816
access_dms_file_base_user,dms_file_base_user,model_dms_file,base.group_user,1,0,0,0
1917
access_dms_file_user,dms_file_user,model_dms_file,group_dms_user,1,1,1,1
2018

21-
access_dms_access_group_public,access_dms_access_group_public,model_dms_access_group,base.group_public,1,0,0,0
2219
access_dms_access_group_portal,access_dms_access_group_portal,model_dms_access_group,base.group_portal,1,0,0,0
2320
access_security_access_groups_user,access_security_access_groups_user,model_dms_access_group,base.group_user,1,0,0,0
2421
access_security_access_groups_dms_user,access_security_access_groups_dms_user,model_dms_access_group,group_dms_user,1,1,1,1

dms/security/security.xml

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<record id="group_dms_user" model="res.groups">
1616
<field name="name">User</field>
1717
<field name="category_id" ref="category_dms_security" />
18-
<field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
18+
<field name="implied_ids" eval="[(4, ref('base.group_erp_manager'))]" />
1919
</record>
2020
<record id="group_dms_manager" model="res.groups">
2121
<field name="name">Manager</field>
@@ -45,7 +45,8 @@
4545
<record id="rule_multi_company_file" model="ir.rule">
4646
<field name="name">File multi-company</field>
4747
<field name="model_id" ref="model_dms_file" />
48-
<field name="global" eval="True" />
48+
<field name="global" eval="False" />
49+
<field name="groups" eval="[(4, ref('group_dms_user'))]" />
4950
<field
5051
name="domain_force"
5152
>['|',('company_id','=',False),('company_id','in',company_ids)]</field>
@@ -121,7 +122,8 @@
121122
<record id="rule_directory_computed_read" model="ir.rule">
122123
<field name="name">Apply computed read permissions.</field>
123124
<field name="model_id" ref="model_dms_directory" />
124-
<field name="global" eval="True" />
125+
<field name="global" eval="False" />
126+
<field name="groups" eval="[(4, ref('group_dms_user'))]" />
125127
<field name="perm_read" eval="1" />
126128
<field name="perm_create" eval="0" />
127129
<field name="perm_write" eval="0" />
@@ -148,6 +150,22 @@
148150
<field name="perm_unlink" eval="0" />
149151
<field name="domain_force">[('permission_write', '=', True)]</field>
150152
</record>
153+
<!-- Portal/Base Users Access Rules -->
154+
<record id="portal_rule_directory_computed_read" model="ir.rule">
155+
<field name="name">Portal Personal Directories Read</field>
156+
<field name="model_id" ref="model_dms_directory" />
157+
<field
158+
name="domain_force"
159+
>[('file_ids.message_partner_ids','child_of',[user.commercial_partner_id.id])]</field>
160+
<field
161+
name="groups"
162+
eval="[Command.link(ref('base.group_portal')), Command.link(ref('base.group_user'))]"
163+
/>
164+
<field name="perm_unlink" eval="False" />
165+
<field name="perm_write" eval="False" />
166+
<field name="perm_read" eval="True" />
167+
<field name="perm_create" eval="False" />
168+
</record>
151169
<record id="rule_file_computed_create" model="ir.rule">
152170
<field name="name">Apply computed create permissions.</field>
153171
<field name="model_id" ref="model_dms_file" />
@@ -161,7 +179,8 @@
161179
<record id="rule_file_computed_read" model="ir.rule">
162180
<field name="name">Apply computed read permissions.</field>
163181
<field name="model_id" ref="model_dms_file" />
164-
<field name="global" eval="True" />
182+
<field name="global" eval="False" />
183+
<field name="groups" eval="[(4, ref('group_dms_user'))]" />
165184
<field name="perm_read" eval="1" />
166185
<field name="perm_create" eval="0" />
167186
<field name="perm_write" eval="0" />
@@ -188,4 +207,21 @@
188207
<field name="perm_unlink" eval="0" />
189208
<field name="domain_force">[('permission_write', '=', True)]</field>
190209
</record>
210+
<!-- Portal/Base Users Access Rules -->
211+
<record id="portal_rule_file_computed_read" model="ir.rule">
212+
<field name="name">Portal Personal Files Read</field>
213+
<field name="model_id" ref="model_dms_file" />
214+
<field name="global" eval="False" />
215+
<field
216+
name="domain_force"
217+
>[('message_partner_ids','child_of',[user.commercial_partner_id.id])]</field>
218+
<field
219+
name="groups"
220+
eval="[Command.link(ref('base.group_portal')), Command.link(ref('base.group_user'))]"
221+
/>
222+
<field name="perm_unlink" eval="False" />
223+
<field name="perm_write" eval="False" />
224+
<field name="perm_read" eval="True" />
225+
<field name="perm_create" eval="False" />
226+
</record>
191227
</odoo>

dms/tests/test_portal.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,17 @@ def test_access_portal(self):
4646
)
4747

4848
def test_tour(self):
49-
# self.portal_user.groups_id = self.env.ref("dms.group_dms_user")
49+
file_id = self.env.ref("dms.file_11_demo")
50+
follower = self.env["mail.followers"].create(
51+
{
52+
"res_model": "dms.file",
53+
"res_id": file_id.id,
54+
"partner_id": self.portal_user.partner_id.id,
55+
"is_active": True,
56+
}
57+
)
58+
59+
file_id.message_follower_ids = follower
5060
for tour in ("dms_portal_mail_tour", "dms_portal_partners_tour"):
5161
with self.subTest(tour=tour):
5262
self.start_tour("/my", tour, login="portal")

0 commit comments

Comments
 (0)