コード例 #1
0
def add_team():
    payload = request.get_json()
    if not payload:
        return jsonify({'message': 'invalid params', 'code': 104000}), 400

    is_admin = login_user.get('is_admin')
    if not is_admin:
        return jsonify({'message': 'admin required', 'code': 104039}), 403

    name = payload.get('name')
    description = payload.get('description')
    parent = payload.get('parent')
    role_ids = payload.get('role_ids')
    members = payload.get('members') or []
    master = payload.get('master') or [login_user.get('username')]
    record = Team.find_one({'name': name})
    if record:
        return jsonify({'message': 'name existed', 'code': 104001}), 400

    if role_ids:
        role_record = Role.find_by_ids(role_ids)
        if not role_record:
            return jsonify({'message': 'role not found', 'code': 104041}), 404

    data = {
        'name': name,
        'description': description,
        'master': master,
        'parent': parent,
        'add_by': login_user.get('username'),
        'created_at': time.time(),
    }

    result = Team.insert_one(data)
    team_id = str(result.inserted_id)
    data['_id'] = team_id
    logger.info('add team', extra={'record': data})
    if not role_ids:
        role = {
            'name': name,
            'type': 'team',
            'role': 'owner',
            'add_by': login_user.get('username'),
            'created_at': time.time(),
        }
        result = Role.insert_one(role)
        role['_id'] = result.inserted_id
        role['team_id'] = data['_id']
        role_ids = [str(role['_id'])]
        # team_role = {
        #     'role_id': result.inserted_id,
        #     'team_id': role['team_id'],
        #     'add_by': login_user.get('username'),
        #     'created_at': time.time(),
        # }
        # Model.build_model('team_roles').insert_one(team_role)

    for role_id in role_ids:
        team_role = {
            '$set': {
                'team_id': team_id,
                'role_id': role_id,
                'created_at': time.time()
            }
        }
        where = {
            'team_id': team_id,
            'role_id': role_id,
        }

        db.collection('team_roles').update_one(where, team_role, upsert=True)

    Team().add_member(team_id, members, owner_id=login_user.get('user_id'))

    return jsonify({
        'message': 'ok',
        'code': 0,
    })
コード例 #2
0
def add_role():
    payload = request.get_json()
    if not payload:
        return jsonify({'message': 'invalid params', 'code': 104000}), 400

    name = payload.get('name')
    description = payload.get('description')
    tags = payload.get('tags')
    role_type = payload.get('type')
    parent = payload.get('parent', None)
    alias = payload.get('alias')
    menus = payload.get('permissions')
    if not name:
        return jsonify({
            'message': 'invalid params',
            'code': 104000,
        }), 400

    role = Role()
    record = role.collection.find_one({'name': name})
    if record:
        return jsonify({'message': 'name existed', 'code': 104001}), 400

    data = {
        'name': name,
        'alias': alias,
        'type': role_type,
        'tags': tags,
        'description': description,
        'parent': parent,
        'created_at': time.time()
    }

    if parent:
        check = role.find_by_id(parent)
        if not check:
            return jsonify({'message': 'invalid param', 'code': 104001}), 400

    result = role.collection.insert_one(data)
    role_id = result.inserted_id
    if role_type == 'team':
        team_existed = Team.find_one({'name': name})
        if team_existed:
            return jsonify({'message': 'team existed', 'code': 104005}), 400

        team = {
            'name': name,
            'description': 'team of role {}'.format(name),
            'add_by': login_user.get('username'),
            'master': [login_user.get('username')],
            'created_at': time.time()
        }
        result = Team.insert_one(team)
        team_role = {
            'team_id': str(result.inserted_id),
            'role_id': str(role_id),
            'add_by': login_user.get('username'),
            'created_at': time.time()
        }
        Team.build_model('team_roles').insert_one(team_role)
    if menus and type(menus) == dict:
        model = Menu()
        data = []
        methods = {
            'read': ['option', 'get'],
            'edit': ['post', 'put', 'patch'],
            'delete': ['delete']
        }
        for _id, actions in menus.items():
            record = model.find_by_id(_id)
            if not record:
                continue

            action_list = []
            for action in actions:
                if not methods.get(action):
                    continue

                action_list.extend(methods.get(action))

            data.append({
                'role_id': str(role_id),
                'm_id': _id,
                'actions': action_list,
                'created_at': time.time(),
                'add_by': login_user.get('username'),
            })

        db.collection('role_menus').insert_many(data)

    return jsonify({
        'message': 'ok',
        'code': 0,
    })