diff options
author | Joas Schilling <coding@schilljs.com> | 2017-01-23 12:10:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-23 12:10:06 +0100 |
commit | 5d486478d3d6d316b1895ea440a05f31488e2f9f (patch) | |
tree | 2eef0379b617d8a720d0c9f0b8a4d33a298f4b8e /settings | |
parent | 16afaa783b8e7b0e728543556c92dcc93241ae4b (diff) | |
parent | 916cc57b0ee827ac9635a6c7b4b2fdbc47e03491 (diff) | |
download | nextcloud-server-5d486478d3d6d316b1895ea440a05f31488e2f9f.tar.gz nextcloud-server-5d486478d3d6d316b1895ea440a05f31488e2f9f.zip |
Merge pull request #3141 from nextcloud/subadmin-check-on-removing-user-from-group
Subadmin check on removing user from group
Diffstat (limited to 'settings')
-rw-r--r-- | settings/ajax/togglegroups.php | 92 | ||||
-rw-r--r-- | settings/js/users/groups.js | 4 | ||||
-rw-r--r-- | settings/js/users/users.js | 75 |
3 files changed, 51 insertions, 120 deletions
diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php deleted file mode 100644 index b9958bef0c9..00000000000 --- a/settings/ajax/togglegroups.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bart Visscher <bartv@thisnet.nl> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Georg Ehrke <georg@owncloud.com> - * @author Jakob Sack <mail@jakobsack.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Robin Appelman <robin@icewind.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -OC_JSON::checkSubAdminUser(); -OCP\JSON::callCheck(); - -$lastConfirm = (int) \OC::$server->getSession()->get('last-password-confirm'); -if ($lastConfirm < (time() - 30 * 60 + 15)) { // allow 15 seconds delay - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Password confirmation is required')))); - exit(); -} - -$success = true; -$username = (string)$_POST['username']; -$group = (string)$_POST['group']; - -if($username === OC_User::getUser() && $group === "admin" && OC_User::isAdminUser($username)) { - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Admins can\'t remove themself from the admin group')))); - exit(); -} - -$isUserAccessible = false; -$isGroupAccessible = false; -$currentUserObject = \OC::$server->getUserSession()->getUser(); -$targetUserObject = \OC::$server->getUserManager()->get($username); -$targetGroupObject = \OC::$server->getGroupManager()->get($group); -if($targetUserObject !== null && $currentUserObject !== null && $targetGroupObject !== null) { - $isUserAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isUserAccessible($currentUserObject, $targetUserObject); - $isGroupAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdminofGroup($currentUserObject, $targetGroupObject); -} - -if(!OC_User::isAdminUser(OC_User::getUser()) - && (!$isUserAccessible - || !$isGroupAccessible)) { - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); - exit(); -} - -if(!OC_Group::groupExists($group)) { - OC_Group::createGroup($group); -} - -$l = \OC::$server->getL10N('settings'); - -$error = $l->t("Unable to add user to group %s", $group); -$action = "add"; - -// Toggle group -if( OC_Group::inGroup( $username, $group )) { - $action = "remove"; - $error = $l->t("Unable to remove user from group %s", $group); - $success = OC_Group::removeFromGroup( $username, $group ); - $usersInGroup=OC_Group::usersInGroup($group); -} -else{ - $success = OC_Group::addToGroup( $username, $group ); -} - -// Return Success story -if( $success ) { - OC_JSON::success(array("data" => array( "username" => $username, "action" => $action, "groupname" => $group ))); -} -else{ - OC_JSON::error(array("data" => array( "message" => $error ))); -} diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index cfe01c17530..aac1609bce7 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -225,7 +225,9 @@ GroupList = { toggleAddGroup: function (event) { if (GroupList.isAddGroupButtonVisible()) { - event.stopPropagation(); + if (event) { + event.stopPropagation(); + } $('#newgroup-form').show(); $('#newgroup-init').hide(); $('#newgroupname').focus(); diff --git a/settings/js/users/users.js b/settings/js/users/users.js index a2ccc059f15..3cf7b5e810a 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -420,42 +420,63 @@ var UserList = { var $element = $(element); - var checkHandler = null; + var addUserToGroup = null, + removeUserFromGroup = null; if(user) { // Only if in a user row, and not the #newusergroups select - checkHandler = function (group) { - if (user === OC.currentUser && group === 'admin') { + var handleUserGroupMembership = function (group, add) { + if (user === OC.getCurrentUser().uid && group === 'admin') { return false; } if (!OC.isUserAdmin() && checked.length === 1 && checked[0] === group) { return false; } - $.post( - OC.filePath('settings', 'ajax', 'togglegroups.php'), - { - username: user, - group: group + + if (add && OC.isUserAdmin() && UserList.availableGroups.indexOf(group) === -1) { + GroupList.createGroup(group); + if (UserList.availableGroups.indexOf(group) === -1) { + UserList.availableGroups.push(group); + } + } + + $.ajax({ + url: OC.linkToOCS('cloud/users/' + user , 2) + 'groups', + data: { + groupid: group }, - function (response) { - if (response.status === 'success') { - GroupList.update(); - var groupName = response.data.groupname; - if (UserList.availableGroups.indexOf(groupName) === -1 && - response.data.action === 'add' - ) { - UserList.availableGroups.push(groupName); - } + type: add ? 'POST' : 'DELETE', + beforeSend: function (request) { + request.setRequestHeader('Accept', 'application/json'); + }, + success: function() { + GroupList.update(); + if (add && UserList.availableGroups.indexOf(group) === -1) { + UserList.availableGroups.push(group); + } - if (response.data.action === 'add') { - GroupList.incGroupCount(groupName); - } else { - GroupList.decGroupCount(groupName); - } + if (add) { + GroupList.incGroupCount(group); + } else { + GroupList.decGroupCount(group); } - if (response.data.message) { - OC.Notification.show(response.data.message); + }, + error: function() { + if (add) { + OC.Notification.show(t('settings', 'Unable to add user to group {group}', { + group: group + })); + } else { + OC.Notification.show(t('settings', 'Unable to remove user from group {group}', { + group: group + })); } } - ); + }); + }; + addUserToGroup = function (group) { + return handleUserGroupMembership(group, true); + }; + removeUserFromGroup = function (group) { + return handleUserGroupMembership(group, false); }; } var addGroup = function (select, group) { @@ -473,8 +494,8 @@ var UserList = { createText: label, selectedFirst: true, checked: checked, - oncheck: checkHandler, - onuncheck: checkHandler, + oncheck: addUserToGroup, + onuncheck: removeUserFromGroup, minWidth: 100 }); }, |