/usr/lib/python2.7/dist-packages/trytond/res/group.py is in tryton-server 3.4.0-3+deb8u3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
"Group"
from itertools import chain
from ..model import ModelView, ModelSQL, fields
from ..pool import Pool, PoolMeta
from ..tools import grouped_slice
__all__ = [
'Group', 'Group2',
]
class MenuMany2Many(fields.Many2Many):
def get(self, ids, model, name, values=None):
Menu = self.get_target()
res = super(MenuMany2Many, self).get(ids, model, name,
values=values)
menu_ids = list(set(chain(*res.values())))
test_ids = []
for sub_ids in grouped_slice(menu_ids):
test_ids.append(map(int, Menu.search([
('id', 'in', sub_ids),
])))
menu_ids = set(chain(*test_ids))
for ids in res.itervalues():
for id_ in ids[:]:
if id_ not in menu_ids:
ids.remove(id_)
return res
class Group(ModelSQL, ModelView):
"Group"
__name__ = "res.group"
name = fields.Char('Name', required=True, select=True, translate=True)
model_access = fields.One2Many('ir.model.access', 'group',
'Access Model')
field_access = fields.One2Many('ir.model.field.access', 'group',
'Access Field')
rule_groups = fields.Many2Many('ir.rule.group-res.group',
'group', 'rule_group', 'Rules',
domain=[('global_p', '!=', True), ('default_p', '!=', True)])
menu_access = MenuMany2Many('ir.ui.menu-res.group',
'group', 'menu', 'Access Menu')
@classmethod
def __setup__(cls):
super(Group, cls).__setup__()
cls._sql_constraints += [
('name_uniq', 'unique (name)',
'The name of the group must be unique!')
]
@classmethod
def copy(cls, groups, default=None):
if default is None:
default = {}
default = default.copy()
new_groups = []
for group in groups:
i = 1
while True:
name = '%s (%d)' % (group.name, i)
if not cls.search([('name', '=', name)], order=[]):
break
i += 1
default['name'] = name
new_groups.extend(super(Group, cls).copy([group], default=default))
return new_groups
@classmethod
def create(cls, vlist):
res = super(Group, cls).create(vlist)
pool = Pool()
# Restart the cache on the domain_get method
pool.get('ir.rule')._domain_get_cache.clear()
# Restart the cache for get_groups
pool.get('res.user')._get_groups_cache.clear()
# Restart the cache for get_preferences
pool.get('res.user')._get_preferences_cache.clear()
# Restart the cache for model access and view
pool.get('ir.model.access')._get_access_cache.clear()
pool.get('ir.model.field.access')._get_access_cache.clear()
ModelView._fields_view_get_cache.clear()
return res
@classmethod
def write(cls, groups, values, *args):
super(Group, cls).write(groups, values, *args)
pool = Pool()
# Restart the cache on the domain_get method
pool.get('ir.rule')._domain_get_cache.clear()
# Restart the cache for get_groups
pool.get('res.user')._get_groups_cache.clear()
# Restart the cache for get_preferences
pool.get('res.user')._get_preferences_cache.clear()
# Restart the cache for model access and view
pool.get('ir.model.access')._get_access_cache.clear()
pool.get('ir.model.field.access')._get_access_cache.clear()
ModelView._fields_view_get_cache.clear()
@classmethod
def delete(cls, groups):
super(Group, cls).delete(groups)
pool = Pool()
# Restart the cache on the domain_get method
pool.get('ir.rule')._domain_get_cache.clear()
# Restart the cache for get_groups
pool.get('res.user')._get_groups_cache.clear()
# Restart the cache for get_preferences
pool.get('res.user')._get_preferences_cache.clear()
# Restart the cache for model access and view
pool.get('ir.model.access')._get_access_cache.clear()
pool.get('ir.model.field.access')._get_access_cache.clear()
ModelView._fields_view_get_cache.clear()
class Group2:
__metaclass__ = PoolMeta
__name__ = "res.group"
users = fields.Many2Many('res.user-res.group', 'group', 'user', 'Users')
|