From 62cb00421bb199b3a6d39478459b9e8e0262469a Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Mon, 18 Sep 2023 15:17:24 +0000 Subject: [PATCH 1/3] fix(logic): member create behave like member save; - Made `member_create` action method behave like `group_member_save` dictize method. --- ckan/logic/action/create.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index 3283aab9e21..a1474eedc32 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -612,7 +612,7 @@ 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(model.Member.state.asc()).first() if member: user_obj = model.User.get(user) if user_obj and member.table_name == u'user' and \ @@ -621,6 +621,8 @@ def member_create(context: Context, capacity != u'admin': raise NotAuthorized("Administrators cannot revoke their " "own admin status") + if member.state != u'active': + member.state = u'active' else: member = model.Member(table_name=obj_type, table_id=obj.id, From a2251859704c06b530fbebc3650b77d26014b514 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Mon, 18 Sep 2023 17:32:10 +0000 Subject: [PATCH 2/3] fix(logic): change log, type ignore; - Added change log file. - Added type ignore for incomplete SQLAlchemy types. --- changes/7804.bugfix | 1 + ckan/logic/action/create.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changes/7804.bugfix 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 a1474eedc32..3aeb4e16cd2 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).\ - order_by(model.Member.state.asc()).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 \ From aa858a1f63998ad59fa6bc96ad52a58720d88f7d Mon Sep 17 00:00:00 2001 From: Jesse Vickery <97247789+JVickery-TBS@users.noreply.github.com> Date: Thu, 21 Sep 2023 13:37:00 -0400 Subject: [PATCH 3/3] Update ckan/logic/action/create.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AdriĆ  Mercader --- ckan/logic/action/create.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index 3aeb4e16cd2..3394868b13b 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -624,8 +624,8 @@ def member_create(context: Context, capacity != u'admin': raise NotAuthorized("Administrators cannot revoke their " "own admin status") - if member.state != u'active': - member.state = u'active' + if member.state != 'active': + member.state = 'active' else: member = model.Member(table_name=obj_type, table_id=obj.id,