Ejemplo n.º 1
0
def update_room(room, args):
    acl_entries = args.pop('acl_entries', None)
    if acl_entries:
        current = {
            e.principal: get_unified_permissions(e)
            for e in room.acl_entries
        }
        update_principals_permissions(room, current, acl_entries)
    _populate_room(room, args)
    db.session.flush()
Ejemplo n.º 2
0
    def _process(self):
        roles = {}
        event_permissions = event_permissions_schema.dump(self.event).get('acl_entries', {})
        roles['global'] = self._map_event_to_track_permissions(event_permissions)
        tracks = Track.query.with_parent(self.event).options(subqueryload('acl_entries'))
        tracks_by_id = {str(track.id): track for track in tracks}
        for track in tracks:
            roles[str(track.id)] = track_permissions_schema.dump(track).get('acl_entries', {})
        form = AbstractReviewingRolesForm(event=self.event, obj=FormDefaults(roles=roles))

        if form.validate_on_submit():
            role_data = form.data['roles']

            # Update global permissions
            global_conveners = []
            global_reviewers = []
            global_roles = role_data.pop('global')
            for identifier, permissions in global_roles:
                principal = principal_from_identifier(identifier, allow_groups=True, allow_event_roles=True,
                                                      event_id=self.event.id)
                if 'convene' in permissions:
                    global_conveners.append(principal)
                if 'review' in permissions:
                    global_reviewers.append(principal)
            update_object_principals(self.event, global_conveners, permission='convene_all_abstracts')
            update_object_principals(self.event, global_reviewers, permission='review_all_abstracts')

            # Update track specific permissions
            track_conveners = []
            track_reviewers = []
            for (track_id, track_roles) in role_data.items():
                acl_entries = {}
                for identifier, permissions in track_roles:
                    principal = principal_from_identifier(identifier, allow_groups=True, allow_event_roles=True,
                                                          event_id=self.event.id)
                    acl_entries[principal] = set(permissions)
                    if 'convene' in permissions:
                        track_conveners.append(principal)
                    if 'review' in permissions:
                        track_reviewers.append(principal)
                track = tracks_by_id[track_id]
                current = {e.principal: get_unified_permissions(e) for e in track.acl_entries}
                update_principals_permissions(track, current, acl_entries)

            # Update event ACL for track and global permissions
            all_conveners = set(global_conveners + track_conveners)
            all_reviewers = set(global_reviewers + track_reviewers)
            update_object_principals(self.event, all_conveners, permission='track_convener')
            update_object_principals(self.event, all_reviewers, permission='abstract_reviewer')

            flash(_("Abstract reviewing roles have been updated."), 'success')
            logger.info("Abstract reviewing roles of %s have been updated by %s", self.event, session.user)
            return jsonify_data()
        return jsonify_form(form, skip_labels=True, form_header_kwargs={'id': 'reviewing-role-form'},
                            disabled_until_change=False)
Ejemplo n.º 3
0
 def _serialize(self, value, attr, obj):
     return [(entry.principal.identifier,
              sorted(get_unified_permissions(entry, self.all_permissions)))
             for entry in value]