Esempio n. 1
0
def add_role():
    payload = request.get_json()
    if not payload:
        return jsonify({
            'message': 'invalid params',
            'code': 104000
        }), 400

    name = payload.get('name')
    tag = payload.get('tag')
    role_type = payload.get('type')
    parent = payload.get('parent', None)
    alias = payload.get('alias')
    menus = payload.get('menus')
    actions = payload.get('actions') or []
    if not tag or 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

    # roles = ['admin', 'master', 'owner', 'member', 'guest']
    # if tag not in roles:
    #     return jsonify({
    #         'message': 'invalid param role',
    #         'code': 104000,
    #     }), 400

    data = {
        'name': name,
        'alias': alias,
        'type': role_type,
        'tag': tag,
        'actions': actions,
        '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 menus and type(menus) == list:
        data = []
        # menus = Menu().find_by_ids(menus)
        menus = Menu().collection.find({})
        if menus:
            for item in menus:
                data.append({
                    'role_id': str(role_id),
                    'm_id': str(item['_id']),
                    'created_at': time.time(),
                    'add_by': login_user.get('username'),
                })

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

    return jsonify({
        'message': 'ok',
        'code': 0,
    })
Esempio n. 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,
    })