Allow to set access to apps from groups edit form
This commit is contained in:
+57
-4
@@ -372,6 +372,9 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
|
||||
name: '',
|
||||
source: '',
|
||||
selectedUsers: [],
|
||||
selectedApps: [],
|
||||
selectedAppsOriginal: [],
|
||||
apps: [],
|
||||
|
||||
show: function (groupInfo) {
|
||||
$scope.groupEdit.error = {};
|
||||
@@ -379,6 +382,13 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
|
||||
$scope.groupEdit.name = groupInfo.name;
|
||||
$scope.groupEdit.source = groupInfo.source;
|
||||
$scope.groupEdit.selectedUsers = groupInfo.userIds.map(function (uid) { return $scope.allUsersById[uid]; });
|
||||
$scope.groupEdit.apps = Client.getInstalledApps();
|
||||
|
||||
$scope.groupEdit.selectedApps = Client.getInstalledApps().filter(function (app) {
|
||||
if (app.accessRestriction === null || !Array.isArray(app.accessRestriction.groups)) return false;
|
||||
return app.accessRestriction.groups.indexOf(groupInfo.id) !== -1;
|
||||
});
|
||||
angular.copy($scope.groupEdit.selectedApps, $scope.groupEdit.selectedAppsOriginal);
|
||||
|
||||
$scope.groupEdit_form.$setPristine();
|
||||
$scope.groupEdit_form.$setUntouched();
|
||||
@@ -412,13 +422,56 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
|
||||
var userIds = $scope.groupEdit.selectedUsers.map(function (u) { return u.id; });
|
||||
|
||||
Client.setGroupMembers($scope.groupEdit.groupInfo.id, userIds, function (error) {
|
||||
$scope.groupEdit.busy = false;
|
||||
if (error) {
|
||||
$scope.groupEdit.busy = false;
|
||||
return console.error('Unable to set group members.', error.statusCode, error.message);
|
||||
}
|
||||
|
||||
if (error) return console.error('Unable to edit group.', error.statusCode, error.message);
|
||||
// find apps where ACL has changed
|
||||
var addedApps = $scope.groupEdit.selectedApps.filter(function (a) {
|
||||
return !$scope.groupEdit.selectedAppsOriginal.find(function (b) { return b.id === a.id; });
|
||||
});
|
||||
var removedApps = $scope.groupEdit.selectedAppsOriginal.filter(function (a) {
|
||||
return !$scope.groupEdit.selectedApps.find(function (b) { return b.id === a.id; });
|
||||
});
|
||||
|
||||
refresh();
|
||||
async.eachSeries(addedApps, function (app, callback) {
|
||||
var accessRestriction = app.accessRestriction;
|
||||
if (!accessRestriction) accessRestriction = { users: [], groups: [] };
|
||||
if (!Array.isArray(accessRestriction.groups)) accessRestriction.groups = [];
|
||||
|
||||
$('#groupEditModal').modal('hide');
|
||||
accessRestriction.groups.push($scope.groupEdit.groupInfo.id);
|
||||
|
||||
Client.configureApp(app.id, 'access_restriction', { accessRestriction: accessRestriction }, callback);
|
||||
}, function (error) {
|
||||
if (error) {
|
||||
$scope.groupEdit.busy = false;
|
||||
return console.error('Unable to set added app access.', error.statusCode, error.message);
|
||||
}
|
||||
|
||||
async.eachSeries(removedApps, function (app, callback) {
|
||||
var accessRestriction = app.accessRestriction;
|
||||
if (!accessRestriction) accessRestriction = { users: [], groups: [] };
|
||||
if (!Array.isArray(accessRestriction.groups)) accessRestriction.groups = [];
|
||||
|
||||
var deleted = accessRestriction.groups.splice(accessRestriction.groups.indexOf($scope.groupEdit.groupInfo.id), 1);
|
||||
|
||||
// if not found return early
|
||||
if (deleted.length === 0) return callback();
|
||||
|
||||
Client.configureApp(app.id, 'access_restriction', { accessRestriction: accessRestriction }, callback);
|
||||
}, function (error) {
|
||||
$scope.groupEdit.busy = false;
|
||||
if (error) return console.error('Unable to set removed app access.', error.statusCode, error.message);
|
||||
|
||||
refresh();
|
||||
|
||||
// refresh apps to reflect change
|
||||
Client.refreshInstalledApps();
|
||||
|
||||
$('#groupEditModal').modal('hide');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user