Allow to set access to apps from groups edit form

This commit is contained in:
Johannes Zellner
2021-02-18 17:01:49 +01:00
parent bfb22c04b7
commit 670f34fde6
2 changed files with 63 additions and 4 deletions
+57 -4
View File
@@ -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');
});
});
});
});
}