Integrate CorpusFollowerRoles

This commit is contained in:
Patrick Jentsch
2023-02-23 13:05:04 +01:00
parent 1be8a449fe
commit 38d09a3490
7 changed files with 284 additions and 126 deletions

View File

@ -21,6 +21,7 @@ from app.models import (
CorpusFile,
CorpusFollowerAssociation,
CorpusFollowerPermission,
CorpusFollowerRole,
CorpusStatus,
User
)
@ -107,30 +108,16 @@ def current_user_unfollow_corpus(corpus_id):
return '', 204
@bp.route('/<hashid:corpus_id>/followers/<hashid:follower_id>/permissions/<permission_name>/add', methods=['POST'])
def add_permission(corpus_id, follower_id, permission_name):
try:
permission = CorpusFollowerPermission[permission_name]
except KeyError:
abort(409) # f'Permission "{permission_name}" does not exist'
@bp.route('/<hashid:corpus_id>/followers/<hashid:follower_id>/role', methods=['POST'])
def add_permission(corpus_id, follower_id):
corpus_follower_association = CorpusFollowerAssociation.query.filter_by(corpus_id=corpus_id, follower_id=follower_id).first_or_404()
if not (corpus_follower_association.corpus.user == current_user or current_user.is_administrator()):
abort(403)
corpus_follower_association.add_permission(permission)
db.session.commit()
return '', 204
@bp.route('/<hashid:corpus_id>/followers/<hashid:follower_id>/permissions/<permission_name>/remove', methods=['POST'])
def remove_permission(corpus_id, follower_id, permission_name):
try:
permission = CorpusFollowerPermission[permission_name]
except KeyError:
return make_response(f'Permission "{permission_name}" does not exist', 409)
corpus_follower_association = CorpusFollowerAssociation.query.filter_by(corpus_id=corpus_id, follower_id=follower_id).first_or_404()
if not (corpus_follower_association.corpus.user == current_user or current_user.is_administrator()):
abort(403)
corpus_follower_association.remove_permission(permission)
role_name = request.json.get('role')
if role_name is None:
abort(400)
corpus_follower_role = CorpusFollowerRole.query.filter_by(name=role_name).first_or_404()
corpus_follower_association.role = corpus_follower_role
db.session.commit()
return '', 204