def index(self): """GET /users_groups: All items in the collection""" # url('users_groups') from rhodecode.lib.utils import PartialRenderer _render = PartialRenderer('data_table/_dt_elements.html') def user_group_name(user_group_id, user_group_name): return _render("user_group_name", user_group_id, user_group_name) def user_group_actions(user_group_id, user_group_name): return _render("user_group_actions", user_group_id, user_group_name) ## json generate group_iter = UserGroupList(UserGroup.query().all(), perm_set=['usergroup.admin']) user_groups_data = [] for user_gr in group_iter: user_groups_data.append({ "group_name": user_group_name(user_gr.users_group_id, h.escape(user_gr.users_group_name)), "group_name_raw": user_gr.users_group_name, "desc": h.escape(user_gr.user_group_description), "members": len(user_gr.members), "active": h.bool2icon(user_gr.users_group_active), "owner": h.escape(h.link_to_user(user_gr.user.username)), "action": user_group_actions(user_gr.users_group_id, user_gr.users_group_name) }) c.data = json.dumps(user_groups_data) return render('admin/user_groups/user_groups.html')
def to_python(self, value, state): perms_update = OrderedSet() perms_new = OrderedSet() # build a list of permission to update and new permission to create #CLEAN OUT ORG VALUE FROM NEW MEMBERS, and group them using new_perms_group = defaultdict(dict) for k, v in value.copy().iteritems(): if k.startswith('perm_new_member'): del value[k] _type, part = k.split('perm_new_member_') args = part.split('_') if len(args) == 1: new_perms_group[args[0]]['perm'] = v elif len(args) == 2: _key, pos = args new_perms_group[pos][_key] = v # fill new permissions in order of how they were added for k in sorted(map(int, new_perms_group.keys())): perm_dict = new_perms_group[str(k)] new_member = perm_dict.get('name') new_perm = perm_dict.get('perm') new_type = perm_dict.get('type') if new_member and new_perm and new_type: perms_new.add((new_member, new_perm, new_type)) for k, v in value.iteritems(): if k.startswith('u_perm_') or k.startswith('g_perm_'): member = k[7:] t = {'u': 'user', 'g': 'users_group' }[k[0]] if member == 'default': if str2bool(value.get('repo_private')): # set none for default when updating to # private repo protects agains form manipulation v = EMPTY_PERM perms_update.add((member, v, t)) value['perms_updates'] = list(perms_update) value['perms_new'] = list(perms_new) # update permissions for k, v, t in perms_new: try: if t is 'user': self.user_db = User.query()\ .filter(User.active == True)\ .filter(User.username == k).one() if t is 'users_group': self.user_db = UserGroup.query()\ .filter(UserGroup.users_group_active == True)\ .filter(UserGroup.users_group_name == k).one() except Exception: log.exception('Updated permission failed') msg = M(self, 'perm_new_member_type', state) raise formencode.Invalid(msg, value, state, error_dict=dict(perm_new_member_name=msg) ) return value
def _to_python(self, value, state): perm_updates = OrderedSet() perm_additions = OrderedSet() perm_deletions = OrderedSet() # build a list of permission to update/delete and new permission # Read the perm_new_member/perm_del_member attributes and group # them by they IDs new_perms_group = defaultdict(dict) del_perms_group = defaultdict(dict) for k, v in value.copy().iteritems(): if k.startswith('perm_del_member'): # delete from org storage so we don't process that later del value[k] # part is `id`, `type` _type, part = k.split('perm_del_member_') args = part.split('_') if len(args) == 2: _key, pos = args del_perms_group[pos][_key] = v if k.startswith('perm_new_member'): # delete from org storage so we don't process that later del value[k] # part is `id`, `type`, `perm` _type, part = k.split('perm_new_member_') args = part.split('_') if len(args) == 2: _key, pos = args new_perms_group[pos][_key] = v # store the deletes for k in sorted(del_perms_group.keys()): perm_dict = del_perms_group[k] del_member = perm_dict.get('id') del_type = perm_dict.get('type') if del_member and del_type: perm_deletions.add((del_member, None, del_type)) # store additions in order of how they were added in web form for k in sorted(new_perms_group.keys()): perm_dict = new_perms_group[k] new_member = perm_dict.get('id') new_type = perm_dict.get('type') new_perm = perm_dict.get('perm') if new_member and new_perm and new_type: perm_additions.add((new_member, new_perm, new_type)) # get updates of permissions # (read the existing radio button states) for k, update_value in value.iteritems(): if k.startswith('u_perm_') or k.startswith('g_perm_'): member = k[7:] update_type = {'u': 'user', 'g': 'users_group'}[k[0]] if member == User.DEFAULT_USER: if str2bool(value.get('repo_private')): # set none for default when updating to # private repo protects agains form manipulation update_value = EMPTY_PERM perm_updates.add((member, update_value, update_type)) # check the deletes value['perm_additions'] = list(perm_additions) value['perm_updates'] = list(perm_updates) value['perm_deletions'] = list(perm_deletions) # validate users they exist and they are active ! for member_id, _perm, member_type in perm_additions: try: if member_type == 'user': self.user_db = User.query()\ .filter(User.active == true())\ .filter(User.user_id == member_id).one() if member_type == 'users_group': self.user_db = UserGroup.query()\ .filter(UserGroup.users_group_active == true())\ .filter(UserGroup.users_group_id == member_id)\ .one() except Exception: log.exception('Updated permission failed: org_exc:') msg = M(self, 'perm_new_member_type', state) raise formencode.Invalid( msg, value, state, error_dict={ 'perm_new_member_name': msg} ) return value