diff --git a/changes/7804.bugfix b/changes/7804.bugfix new file mode 100644 index 00000000000..23e12414616 --- /dev/null +++ b/changes/7804.bugfix @@ -0,0 +1 @@ +Aligned `member_create` with `group_member_save` to prevent possible member duplication. diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index 3283aab9e21..3394868b13b 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -612,7 +612,10 @@ def member_create(context: Context, filter(model.Member.table_name == obj_type).\ filter(model.Member.table_id == obj.id).\ filter(model.Member.group_id == group.id).\ - filter(model.Member.state == 'active').first() + order_by( + # type_ignore_reason: incomplete SQLAlchemy types + model.Member.state.asc() # type: ignore + ).first() if member: user_obj = model.User.get(user) if user_obj and member.table_name == u'user' and \ @@ -621,6 +624,8 @@ def member_create(context: Context, capacity != u'admin': raise NotAuthorized("Administrators cannot revoke their " "own admin status") + if member.state != 'active': + member.state = 'active' else: member = model.Member(table_name=obj_type, table_id=obj.id,