Browse Source

May 19: [FIX] Bug Fixed 'hide_menu_user'

16.0
Cybrosys Technologies 4 days ago
parent
commit
5d86565540
  1. 77
      hide_menu_user/models/res_user.py
  2. 2
      hide_menu_user/security/security.xml
  3. 2
      hide_menu_user/views/res_users.xml

77
hide_menu_user/models/res_user.py

@ -28,41 +28,72 @@ class HideMenuUser(models.Model):
@api.model_create_multi
def create(self, vals_list):
"""
Else the menu will be still hidden even after removing from the list
"""
"""Clear caches to ensure menu visibility updates"""
self.clear_caches()
return super(HideMenuUser, self).create(vals_list)
def write(self, vals):
"""
Else the menu will be still hidden even after removing from the list
"""
"""Update menu restrictions and clear caches"""
res = super(HideMenuUser, self).write(vals)
for record in self:
for menu in record.hide_menu_ids:
menu.write({
'restrict_user_ids': [(4, record.id)]
})
if 'hide_menu_ids' in vals:
for menu in record.hide_menu_ids:
menu.write({
'restrict_user_ids': [(4, record.id)]
})
# Remove user from restrict_user_ids for menus no longer in hide_menu_ids
menus_to_remove = self.env['ir.ui.menu'].search([
('restrict_user_ids', 'in', [record.id]),
('id', 'not in', record.hide_menu_ids.ids)
])
for menu in menus_to_remove:
menu.write({
'restrict_user_ids': [(3, record.id)]
})
self.clear_caches()
return res
def _get_is_admin(self):
"""
The Hide specific menu tab will be hidden for the Admin user form.
Else once the menu is hidden, it will be difficult to re-enable it.
"""
@api.depends('groups_id')
def _compute_is_admin(self):
"""Determine if user is admin to control menu hiding visibility"""
for rec in self:
rec.is_admin = False
if rec.id == self.env.ref('base.user_admin').id:
rec.is_admin = True
rec.is_admin = rec.id == self.env.ref('base.user_admin').id or \
rec.has_group('base.group_system')
hide_menu_ids = fields.Many2many('ir.ui.menu', string="Menu", store=True,
help='Select menu items that needs to be '
'hidden to this user ')
is_admin = fields.Boolean(compute=_get_is_admin, string="Admin")
hide_menu_ids = fields.Many2many(
'ir.ui.menu',
string="Hidden Menus",
store=True,
help='Select menu items to hide for this user'
)
is_admin = fields.Boolean(
compute='_compute_is_admin',
string="Is Admin",
help="Indicates if user has admin privileges"
)
class RestrictMenu(models.Model):
_inherit = 'ir.ui.menu'
restrict_user_ids = fields.Many2many('res.users')
restrict_user_ids = fields.Many2many(
'res.users',
string='Restricted Users',
help='Users for whom this menu is hidden'
)
@api.model
def _visible_menu_ids(self, debug=False):
"""Override to filter out menus restricted for current user"""
menu_ids = super(RestrictMenu, self)._visible_menu_ids(debug=debug)
# Admin users see all menus
if self.env.user.has_group('base.group_system'):
return menu_ids
# Filter out menus where current user is in restrict_user_ids
restricted_menus = self.search([
('id', 'in', list(menu_ids)),
('restrict_user_ids', 'in', [self.env.user.id])
])
return set(menu_ids) - set(restricted_menus.ids)

2
hide_menu_user/security/security.xml

@ -6,4 +6,4 @@
<field name="domain_force">[('restrict_user_ids','not in',user.id)]</field>
</record>
</odoo>
</odoo>

2
hide_menu_user/views/res_users.xml

@ -33,4 +33,4 @@
</field>
</record>
</data>
</odoo>
</odoo>

Loading…
Cancel
Save