summaryrefslogtreecommitdiff
path: root/app/controllers/groups
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-09-14 21:52:54 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-09-14 21:52:54 +0300
commit1aa48174db63871bb10b53e49c86222a4d9b7c6d (patch)
tree63de989577bd4304dbeee82bfb2a1e41bbdd4976 /app/controllers/groups
parent13af7de9411ef20fcab00f7c5d7cdc6b90dbd4b7 (diff)
downloadgitlab-ce-1aa48174db63871bb10b53e49c86222a4d9b7c6d.tar.gz
Fix STI+polymorphic for Group <-> GroupMember
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/controllers/groups')
-rw-r--r--app/controllers/groups/group_members_controller.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/app/controllers/groups/group_members_controller.rb b/app/controllers/groups/group_members_controller.rb
new file mode 100644
index 00000000000..63c05d4f33b
--- /dev/null
+++ b/app/controllers/groups/group_members_controller.rb
@@ -0,0 +1,48 @@
+class Groups::GroupMembersController < ApplicationController
+ before_filter :group
+
+ # Authorize
+ before_filter :authorize_admin_group!
+
+ layout 'group'
+
+ def create
+ @group.add_users(params[:user_ids].split(','), params[:access_level])
+
+ redirect_to members_group_path(@group), notice: 'Users were successfully added.'
+ end
+
+ def update
+ @member = @group.group_members.find(params[:id])
+ @member.update_attributes(member_params)
+ end
+
+ def destroy
+ @users_group = @group.group_members.find(params[:id])
+ if can?(current_user, :destroy, @users_group) # May fail if last owner.
+ @users_group.destroy
+ respond_to do |format|
+ format.html { redirect_to members_group_path(@group), notice: 'User was successfully removed from group.' }
+ format.js { render nothing: true }
+ end
+ else
+ return render_403
+ end
+ end
+
+ protected
+
+ def group
+ @group ||= Group.find_by(path: params[:group_id])
+ end
+
+ def authorize_admin_group!
+ unless can?(current_user, :manage_group, group)
+ return render_404
+ end
+ end
+
+ def member_params
+ params.require(:group_member).permit(:access_level, :user_id)
+ end
+end