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, })
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, })