[FIX] User with 'Access Rights' rights not able to access Users menu

The ERP managers (users with 'Access Rights' rights) cannot even click on
the Settings app menuitem. Because of 2 things:
- The Dashboard settings is accessing the model ir_module_module. So
  we set a groups 'group_settings' on it.
- The Users view is accessing the model ir_module_category to groups
  the aggregate and display the settings. So we change the security rules
  by giving the access to the group_erp_manager instead of group_settings
- The global rules opn companies was applied to the erp managers. We
  splitted this ir.rules into three new ones on portal,public and employee
  users to allow the erp managers to access the companies
- Writing on the res_groups was calling the method _update_user_groups_view
  in all the cases. This method should be called only when the view was
  needed to be modified, i.e. when the category_id is modified for this
  group.
This commit is contained in:
Yannick Tivisse
2016-03-07 15:53:30 +01:00
parent 29404e096b
commit abdca55ea2
7 changed files with 27 additions and 12 deletions
+1 -1
View File
@@ -114,7 +114,7 @@
<field name="view_mode">form</field>
<field name="target">inline</field>
</record>
<menuitem id="base.menu_config" name="General Settings" parent="base.menu_administration" sequence="1" action="action_general_configuration"/>
<menuitem id="base.menu_config" name="General Settings" parent="base.menu_administration" sequence="1" action="action_general_configuration" groups="base.group_system"/>
<!-- Sale config wizard -->
@@ -4,5 +4,5 @@
<field name="name">Dashboard</field>
<field name="tag">web_settings_dashboard.main</field>
</record>
<menuitem name="Dashboard" id="web_dashboard_menu" action="web_settings_dashboard_action" parent="base.menu_administration" sequence="-1" />
<menuitem name="Dashboard" id="web_dashboard_menu" action="web_settings_dashboard_action" parent="base.menu_administration" sequence="-1" groups="base.group_system"/>
</odoo>
+1 -1
View File
@@ -11,7 +11,7 @@
icon="fa-cog"
web_icon="base,static/description/settings.png"
sequence="500"
groups="base.group_system"/>
groups="base.group_erp_manager"/>
<menuitem id="menu_management" name="Apps" sequence="310" web_icon="base,static/description/modules.png" groups="base.group_system"/>
<menuitem id="menu_administration_shortcut" parent="menu_administration" name="Custom Shortcuts" sequence="50"/>
<menuitem id="menu_users" name="Users" parent="menu_administration" sequence="0"/>
+19 -5
View File
@@ -11,12 +11,26 @@
<field eval="[(6,0,[ref('group_system'), ref('group_partner_manager')])]" name="groups_id"/>
</record>
<!-- Record Rule For Company -->
<record id="res_company_rule" model="ir.rule">
<field name="name">company rule</field>
<!-- Record Rules For Company -->
<record id="res_company_rule_portal" model="ir.rule">
<field name="name">company rule portal</field>
<field name="model_id" ref="model_res_company"/>
<field eval="True" name="global"/>
<!-- TODO: review this <field name="domain_force">['|', ('child_ids', 'child_of', [user.company_id.id]), ('parent_id', 'child_of', [user.company_id.id])]</field> -->
<field eval="False" name="global"/>
<field name="groups" eval="[(6, 0, [ref('base.group_portal')])]"/>
<field name="domain_force">[('id','child_of',[user.company_id.id])]</field>
</record>
<record id="res_company_rule_employee" model="ir.rule">
<field name="name">company rule employee</field>
<field name="model_id" ref="model_res_company"/>
<field eval="False" name="global"/>
<field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/>
<field name="domain_force">[('id','child_of',[user.company_id.id])]</field>
</record>
<record id="res_company_rule_public" model="ir.rule">
<field name="name">company rule public</field>
<field name="model_id" ref="model_res_company"/>
<field eval="False" name="global"/>
<field name="groups" eval="[(6, 0, [ref('base.group_public')])]"/>
<field name="domain_force">[('id','child_of',[user.company_id.id])]</field>
</record>
+3 -2
View File
@@ -183,7 +183,7 @@ class Users(models.Model):
return (default_user or self.env['res.users']).groups_id
def _companies_count(self):
return self.env['res.company'].search_count([])
return self.env['res.company'].sudo().search_count([])
partner_id = fields.Many2one('res.partner', required=True, ondelete='restrict', auto_join=True,
string='Related Partner', help='Partner-related data of the user')
@@ -674,7 +674,8 @@ class GroupsView(models.Model):
@api.multi
def write(self, values):
res = super(GroupsView, self).write(values)
self._update_user_groups_view()
if 'category_id' in values:
self._update_user_groups_view()
# ir_values.get_actions() depends on action records
self.env['ir.values'].clear_caches()
return res
@@ -17,7 +17,7 @@
"access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,0,0,0
"access_ir_model_data_user","ir_model_data user","model_ir_model_data",base.group_user,1,0,1,0
"access_ir_model_fields_all","ir_model_fields all","model_ir_model_fields",,1,0,0,0
"access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category","group_system",1,0,0,0
"access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category","group_erp_manager",1,0,0,0
"access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1
"access_ir_module_module_dependency_group_system","ir_module_module_dependency group_system","model_ir_module_module_dependency","group_system",1,1,1,1
"access_ir_property_group_user","ir_property group_user","model_ir_property",,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
17 access_ir_model_data_all ir_model_data all model_ir_model_data 1 0 0 0
18 access_ir_model_data_user ir_model_data user model_ir_model_data base.group_user 1 0 1 0
19 access_ir_model_fields_all ir_model_fields all model_ir_model_fields 1 0 0 0
20 access_ir_module_category_group_user ir_module_category group_user model_ir_module_category group_system group_erp_manager 1 0 0 0
21 access_ir_module_module_group_user ir_module_module group_user model_ir_module_module group_system 1 1 1 1
22 access_ir_module_module_dependency_group_system ir_module_module_dependency group_system model_ir_module_module_dependency group_system 1 1 1 1
23 access_ir_property_group_user ir_property group_user model_ir_property 1 0 0 0
+1 -1
View File
@@ -124,7 +124,7 @@
Modify the global rule on res_company which triggers a recursive check
of the rules on company.
-
!record {model: ir.rule, id: res_company_rule}:
!record {model: ir.rule, id: res_company_rule_employee}:
domain_force: "[('id','child_of',[user.company_id.id])]"
-
Read as demo user the partners (exercising the global company rule).