Metatron_Student_ERP/fix_all_perms 2.py

49 lines
2.5 KiB
Python

import re
with open('addons/education_lms/security/security.xml', 'r') as f:
text = f.read()
# Replace all student rules to explicitly have perm_read="True"
# We will do this by finding </field>\n <field name="groups" eval="[(4, ref('group_education_lms_student'))]"/>
# and adding perm_read="True" after it.
def replace_perms(match):
return match.group(0) + '\n <field name="perm_read" eval="True"/>\n <field name="perm_write" eval="False"/>\n <field name="perm_create" eval="False"/>\n <field name="perm_unlink" eval="False"/>'
# First, remove existing perms to avoid duplicates
text = re.sub(r' *<field name="perm_(read|write|create|unlink)".*?/>\n', '', text)
# Now add default perms back to Faculty
text = re.sub(
r'(<field name="groups" eval="\[\(4, ref\(\'group_education_lms_faculty\'\)\)\]"/>)',
r'\1\n <field name="perm_read" eval="True"/>\n <field name="perm_write" eval="True"/>\n <field name="perm_create" eval="True"/>\n <field name="perm_unlink" eval="True"/>',
text
)
# And Admin
text = re.sub(
r'(<field name="groups" eval="\[\(4, ref\(\'group_education_lms_admin\'\)\)\]"/>)',
r'\1\n <field name="perm_read" eval="True"/>\n <field name="perm_write" eval="True"/>\n <field name="perm_create" eval="True"/>\n <field name="perm_unlink" eval="True"/>',
text
)
# And Student (Read Only except for submission)
text = re.sub(
r'(<record id="rule_lms_.*?_student" model="ir.rule">.*?<field name="groups" eval="\[\(4, ref\(\'group_education_lms_student\'\)\)\]"/>)',
r'\1\n <field name="perm_read" eval="True"/>\n <field name="perm_write" eval="False"/>\n <field name="perm_create" eval="False"/>\n <field name="perm_unlink" eval="False"/>',
text,
flags=re.DOTALL
)
# Exception for Student Submission Sandbox (needs write, create, unlink maybe?)
# Actually Submission Sandbox might need create/write
text = re.sub(
r'(<record id="rule_lms_submission_student" model="ir.rule">.*?)<field name="perm_write" eval="False"/>\n <field name="perm_create" eval="False"/>\n <field name="perm_unlink" eval="False"/>',
r'\1<field name="perm_write" eval="True"/>\n <field name="perm_create" eval="True"/>\n <field name="perm_unlink" eval="False"/>',
text,
flags=re.DOTALL
)
with open('addons/education_lms/security/security.xml', 'w') as f:
f.write(text)