mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 03:36:18 +08:00
FEATURE: support group owner, capable of controlling group membership
Group owners are regular users that can add or remove users to a group The Admin UX allows admins to appoint group owners The public group UX will display group owners first and unlock UI to add and remove members Group owners can only be appointed on non automatic groups Group owners may not appoint another group owner
This commit is contained in:
@ -107,58 +107,30 @@ class Admin::GroupsController < Admin::AdminController
|
||||
render json: success_json
|
||||
end
|
||||
|
||||
def add_members
|
||||
def add_owners
|
||||
group = Group.find(params.require(:id))
|
||||
|
||||
return can_not_modify_automatic if group.automatic
|
||||
|
||||
if params[:usernames].present?
|
||||
users = User.where(username: params[:usernames].split(","))
|
||||
elsif params[:user_ids].present?
|
||||
users = User.find(params[:user_ids].split(","))
|
||||
elsif params[:user_emails].present?
|
||||
users = User.where(email: params[:user_emails].split(","))
|
||||
else
|
||||
raise Discourse::InvalidParameters.new('user_ids or usernames or user_emails must be present')
|
||||
end
|
||||
users = User.where(username: params[:usernames].split(","))
|
||||
|
||||
users.each do |user|
|
||||
if !group.users.include?(user)
|
||||
group.add(user)
|
||||
else
|
||||
return render_json_error I18n.t('groups.errors.member_already_exist', username: user.username)
|
||||
end
|
||||
group.group_users.where(user_id: user.id).update_all(owner: true)
|
||||
end
|
||||
|
||||
if group.save
|
||||
render json: success_json
|
||||
else
|
||||
render_json_error(group)
|
||||
end
|
||||
render json: success_json
|
||||
end
|
||||
|
||||
def remove_member
|
||||
def remove_owner
|
||||
group = Group.find(params.require(:id))
|
||||
|
||||
return can_not_modify_automatic if group.automatic
|
||||
|
||||
if params[:user_id].present?
|
||||
user = User.find(params[:user_id])
|
||||
elsif params[:username].present?
|
||||
user = User.find_by_username(params[:username])
|
||||
else
|
||||
raise Discourse::InvalidParameters.new('user_id or username must be present')
|
||||
end
|
||||
user = User.find(params[:user_id].to_i)
|
||||
group.group_users.where(user_id: user.id).update_all(owner: false)
|
||||
|
||||
user.primary_group_id = nil if user.primary_group_id == group.id
|
||||
|
||||
group.users.delete(user.id)
|
||||
|
||||
if group.save && user.save
|
||||
render json: success_json
|
||||
else
|
||||
render_json_error(group)
|
||||
end
|
||||
render json: success_json
|
||||
end
|
||||
|
||||
protected
|
||||
|
Reference in New Issue
Block a user