diff --git a/src/js/client.js b/src/js/client.js
index f504915fe..b5c8a4193 100644
--- a/src/js/client.js
+++ b/src/js/client.js
@@ -687,9 +687,10 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N
}).error(defaultErrorHandler(callback));
};
- Client.prototype.createGroup = function (name, callback) {
+ Client.prototype.createGroup = function (name, roles, callback) {
var data = {
- name: name
+ name: name,
+ roles: roles
};
post('/api/v1/groups', data).success(function(data, status) {
@@ -698,6 +699,18 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N
}).error(defaultErrorHandler(callback));
};
+ Client.prototype.updateGroup = function (id, name, roles, callback) {
+ var data = {
+ name: name,
+ roles: roles
+ };
+
+ post('/api/v1/groups/' + id, data).success(function(data, status) {
+ if (status !== 200 || typeof data !== 'object') return callback(new ClientError(status, data));
+ callback(null, data);
+ }).error(defaultErrorHandler(callback));
+ };
+
Client.prototype.removeGroup = function (groupId, password, callback) {
var config = {
data: {
diff --git a/src/views/users.html b/src/views/users.html
index 882904bc0..ef20508f8 100644
--- a/src/views/users.html
+++ b/src/views/users.html
@@ -154,6 +154,26 @@
{{ groupAdd.error.name }}
+
+
+
@@ -166,6 +186,49 @@
+
+
+
@@ -275,7 +338,7 @@
-
+
|
@@ -313,10 +376,11 @@
- |
+ |
{{ group.name }}
|
+
|
diff --git a/src/views/users.js b/src/views/users.js
index ce10d40d6..6939d8be3 100644
--- a/src/views/users.js
+++ b/src/views/users.js
@@ -226,6 +226,11 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
busy: false,
error: {},
name: '',
+ roles: {
+ canManageUsers: false,
+ canManageApps: false,
+ canManageDomains: false,
+ },
show: function () {
$scope.groupAdd.busy = false;
@@ -243,7 +248,12 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
$scope.groupAdd.busy = true;
$scope.groupAdd.error = {};
- Client.createGroup($scope.groupAdd.name, function (error) {
+ var roles = [ ];
+ if ($scope.groupAdd.roles.canManageApps) roles.push('manage_apps');
+ if ($scope.groupAdd.roles.canManageUsers) roles.push('manage_users');
+ if ($scope.groupAdd.roles.canManageDomains) roles.push('manage_domains');
+
+ Client.createGroup($scope.groupAdd.name, roles, function (error) {
$scope.groupAdd.busy = false;
if (error && error.statusCode === 409) {
@@ -266,6 +276,69 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
}
};
+ $scope.groupEdit = {
+ busy: false,
+ error: {},
+ groupInfo: {},
+ name: '',
+ roles: {
+ canManageUsers: false,
+ canManageApps: false,
+ canManageDomains: false,
+ },
+
+ show: function (groupInfo) {
+ $scope.groupEdit.error = {};
+ $scope.groupEdit.groupInfo = groupInfo;
+ $scope.groupEdit.name = groupInfo.name;
+
+ for (var i = 0; i < groupInfo.roles.length; i++) {
+ switch (groupInfo.roles[i]) {
+ case 'manage_apps': $scope.groupEdit.roles.canManageApps = true; break;
+ case 'manage_users': $scope.groupEdit.roles.canManageUsers = true; break;
+ case 'manage_domains': $scope.groupEdit.roles.canManageDomains = true; break;
+ default: break;
+ }
+ }
+
+ $scope.groupEdit_form.$setPristine();
+ $scope.groupEdit_form.$setUntouched();
+
+ $('#groupEditModal').modal('show');
+ },
+
+ submit: function () {
+ $scope.groupEdit.busy = true;
+ $scope.groupEdit.error = {};
+
+ var roles = [ ];
+ if ($scope.groupEdit.roles.canManageApps) roles.push('manage_apps');
+ if ($scope.groupEdit.roles.canManageUsers) roles.push('manage_users');
+ if ($scope.groupEdit.roles.canManageDomains) roles.push('manage_domains');
+
+ Client.updateGroup($scope.groupEdit.groupInfo.id, $scope.groupEdit.name, roles, function (error) {
+ $scope.groupEdit.busy = false;
+
+ if (error && error.statusCode === 409) {
+ $scope.groupEdit.error.name = 'Name already taken';
+ $scope.groupEditForm.name.$setPristine();
+ $('#groupEditName').focus();
+ return;
+ } else if (error && error.statusCode === 400) {
+ $scope.groupEdit.error.name = error.message;
+ $scope.groupEditForm.name.$setPristine();
+ $('#groupEditName').focus();
+ return;
+ }
+ if (error) return console.error('Unable to edit group.', error.statusCode, error.message);
+
+ refresh();
+
+ $('#groupEditModal').modal('hide');
+ });
+ }
+ };
+
$scope.inviteSent = {
email: '',
setupLink: ''
@@ -365,7 +438,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
Client.onReady(refresh);
// setup all the dialog focus handling
- ['userAddModal', 'userRemoveModal', 'userEditModal', 'groupAddModal', 'groupRemoveModal'].forEach(function (id) {
+ ['userAddModal', 'userRemoveModal', 'userEditModal', 'groupAddModal', 'groupEditModal', 'groupRemoveModal'].forEach(function (id) {
$('#' + id).on('shown.bs.modal', function () {
$(this).find("[autofocus]:first").focus();
});