diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index 76524a10814..afdae0d03d3 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -1118,6 +1118,7 @@ class IrModelRelation(models.Model): class IrModelAccess(models.Model): _name = 'ir.model.access' _description = 'Model Access' + _order = 'model_id,group_id,name,id' name = fields.Char(required=True, index=True) active = fields.Boolean(default=True, help='If you uncheck the active field, it will disable the ACL without deleting it (if you delete a native ACL, it will be re-created when you reload the module).') diff --git a/odoo/addons/base/models/ir_rule.py b/odoo/addons/base/models/ir_rule.py index 90869ef45ac..a011272d855 100644 --- a/odoo/addons/base/models/ir_rule.py +++ b/odoo/addons/base/models/ir_rule.py @@ -13,7 +13,7 @@ from odoo.tools.safe_eval import safe_eval class IrRule(models.Model): _name = 'ir.rule' _description = 'Record Rule' - _order = 'model_id DESC' + _order = 'model_id DESC,id' _MODES = ['read', 'write', 'create', 'unlink'] name = fields.Char(index=True) diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index d7e6ada0efb..0c09d89ca9c 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -251,6 +251,13 @@ class Users(models.Model): name = fields.Char(related='partner_id.name', inherited=True, readonly=False) email = fields.Char(related='partner_id.email', inherited=True, readonly=False) + accesses_count = fields.Integer('# Access Rights', help='Number of access rights that apply to the current user', + compute='_compute_accesses_count') + rules_count = fields.Integer('# Record Rules', help='Number of record rules that apply to the current user', + compute='_compute_accesses_count') + groups_count = fields.Integer('# Groups', help='Number of groups that apply to the current user', + compute='_compute_accesses_count') + _sql_constraints = [ ('login_key', 'UNIQUE (login)', 'You can not have two users with the same login !') ] @@ -350,6 +357,14 @@ class Users(models.Model): for user in self: user.tz_offset = datetime.datetime.now(pytz.timezone(user.tz or 'GMT')).strftime('%z') + @api.depends('groups_id') + def _compute_accesses_count(self): + for user in self: + groups = user.groups_id + user.accesses_count = len(groups.mapped('model_access')) + user.rules_count = len(groups.mapped('rule_groups')) + user.groups_count = len(groups) + @api.onchange('login') def on_change_login(self): if self.login and tools.single_email_re.match(self.login): @@ -697,6 +712,45 @@ class Users(models.Model): # for a few places explicitly clearing the has_group cache has_group.clear_cache = _has_group.clear_cache + def action_show_groups(self): + self.ensure_one() + return { + 'name': _('Groups'), + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'res.groups', + 'type': 'ir.actions.act_window', + 'context': {'create': False, 'delete': False}, + 'domain': [('id','in', self.groups_id.ids)], + 'target': 'current', + } + + def action_show_accesses(self): + self.ensure_one() + return { + 'name': _('Access Rights'), + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'ir.model.access', + 'type': 'ir.actions.act_window', + 'context': {'create': False, 'delete': False}, + 'domain': [('id', 'in', self.mapped('groups_id.model_access').ids)], + 'target': 'current', + } + + def action_show_rules(self): + self.ensure_one() + return { + 'name': _('Record Rules'), + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'ir.rule', + 'type': 'ir.actions.act_window', + 'context': {'create': False, 'delete': False}, + 'domain': [('id', 'in', self.mapped('groups_id.rule_groups').ids)], + 'target': 'current', + } + @api.multi def _is_public(self): self.ensure_one() diff --git a/odoo/addons/base/views/ir_model_views.xml b/odoo/addons/base/views/ir_model_views.xml index 60385fb46db..092f87a49bb 100644 --- a/odoo/addons/base/views/ir_model_views.xml +++ b/odoo/addons/base/views/ir_model_views.xml @@ -530,6 +530,25 @@ + ir.model.access.view.tree + ir.model.access + + + + + + + + + + + + + + ir.model.access.view.tree.edition ir.model.access
+ @@ -590,7 +612,7 @@ Access Rights ir.model.access form - + diff --git a/odoo/addons/base/views/res_users_views.xml b/odoo/addons/base/views/res_users_views.xml index 88aca904336..e895d88eff3 100644 --- a/odoo/addons/base/views/res_users_views.xml +++ b/odoo/addons/base/views/res_users_views.xml @@ -163,6 +163,15 @@
+ + +