groups: local groups can have remote and local users

This commit is contained in:
Girish Ramakrishnan
2024-02-28 16:42:17 +01:00
parent 50a069a7fa
commit 0d38e443d1
3 changed files with 21 additions and 16 deletions
+2 -2
View File
@@ -1734,8 +1734,8 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
});
};
Client.prototype.setGroups = function (userId, groupIds, callback) {
put('/api/v1/users/' + userId + '/groups', { groupIds: groupIds }, null, function (error, data, status) {
Client.prototype.setLocalGroups = function (userId, localGroupIds, callback) {
put('/api/v1/users/' + userId + '/groups', { groupIds: localGroupIds }, null, function (error, data, status) {
if (error) return callback(error);
if (status !== 204) return callback(new ClientError(status, data));
+5 -3
View File
@@ -56,7 +56,7 @@
<label class="control-label">{{ 'users.user.groups' | tr }}</label>
<div class="control-label">
<div ng-show="groups.length === 0">{{ 'users.user.noGroups' | tr }}</div>
<multiselect ng-show="groups.length !== 0" ng-model="userAdd.selectedGroups" options="group.name for group in groups" data-compare-by="name" data-multiple="true" filter-after-rows="5" scroll-after-rows="10"></multiselect>
<multiselect ng-show="groups.length !== 0" ng-model="userAdd.selectedLocalGroups" options="group.name for group in groups | filter:{ source: '' }" data-compare-by="name" data-multiple="true" filter-after-rows="5" scroll-after-rows="10"></multiselect>
</div>
</div>
@@ -158,8 +158,10 @@
<div ng-switch on="groups.length">
<div ng-switch-when="0">{{ 'users.user.noGroups' | tr }}</div>
<div ng-switch-default>
<multiselect ng-show="!userEdit.source || !config.ldapGroupsSynced" ng-model="userEdit.selectedGroups" options="group.name for group in groups" data-compare-by="id" data-multiple="true" filter-after-rows="5" scroll-after-rows="10"></multiselect>
<div ng-show="userEdit.source && config.ldapGroupsSynced"><span ng-repeat="group in groups">{{ group.name }}</span></div>
<!-- local groups. they can have local and external users-->
<multiselect ng-show="hasLocalGroups" ng-model="userEdit.selectedLocalGroups" options="group.name for group in groups | filter: { source: '' }" data-compare-by="id" data-multiple="true" filter-after-rows="5" scroll-after-rows="10"></multiselect>
<!-- remote groups. cannot be edited -->
<div ng-show="userEdit.externalGroups.length"><br/>LDAP: <span ng-repeat="group in externalGroups">{{ group.name }}</span></div>
</div>
</div>
</div>
+14 -11
View File
@@ -13,6 +13,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
$scope.users = []; // users of current page
$scope.allUsersById = [];
$scope.groups = [];
$scope.hasLocalGroups = false;
$scope.groupsById = { };
$scope.config = Client.getConfig();
$scope.userInfo = Client.getUserInfo();
@@ -270,7 +271,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
fallbackEmail: '',
username: '',
displayName: '',
selectedGroups: [],
selectedLocalGroups: [],
role: 'user',
sendInvite: false,
@@ -280,7 +281,7 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
$scope.userAdd.fallbackEmail = '';
$scope.userAdd.username = '';
$scope.userAdd.displayName = '';
$scope.userAdd.selectedGroups = [];
$scope.userAdd.selectedLocalGroups = [];
$scope.userAdd.role = 'user';
$scope.userAdd.sendInvite = false;
@@ -344,9 +345,9 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
}
}
var groupIds = $scope.userAdd.selectedGroups.map(function (g) { return g.id; });
var localGroupIds = $scope.userAdd.selectedLocalGroups.map(function (g) { return g.id; });
Client.setGroups(userId, groupIds, function (error) {
Client.setLocalGroups(userId, localGroupIds, function (error) {
$scope.userAdd.busy = false;
if (error) return console.error(error);
@@ -376,7 +377,8 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
displayName: '',
active: false,
source: '',
selectedGroups: [],
selectedLocalGroups: [],
externalGroups: [],
role: '',
show: function (userInfo) {
@@ -386,7 +388,8 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
$scope.userEdit.displayName = userInfo.displayName;
$scope.userEdit.fallbackEmail = userInfo.fallbackEmail;
$scope.userEdit.userInfo = userInfo;
$scope.userEdit.selectedGroups = userInfo.groupIds.map(function (gid) { return $scope.groupsById[gid]; });
$scope.userEdit.selectedLocalGroups = userInfo.groupIds.map(function (gid) { return $scope.groupsById[gid]; }).filter(function (g) { return g.source === ''; });
$scope.userEdit.externalGroups = userInfo.groupIds.map(function (gid) { return $scope.groupsById[gid]; }).filter(function (g) { return g.source !== ''; });
$scope.userEdit.active = userInfo.active;
$scope.userEdit.source = userInfo.source;
$scope.userEdit.role = userInfo.role;
@@ -422,11 +425,9 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
data.fallbackEmail = $scope.userEdit.fallbackEmail;
Client.updateUserProfile(userId, data, next);
},
function setGroups(next) {
if ($scope.config.ldapGroupsSynced) return next(); // cannot update user groups when syncing ldap groups
var groupIds = $scope.userEdit.selectedGroups.map(function (g) { return g.id; });
Client.setGroups(userId, groupIds, next);
function setLocalGroups(next) {
var localGroupIds = $scope.userEdit.selectedLocalGroups.map(function (g) { return g.id; });
Client.setLocalGroups(userId, localGroupIds, next);
}
], function (error) {
$scope.userEdit.busy = false;
@@ -846,8 +847,10 @@ angular.module('Application').controller('UsersController', ['$scope', '$locatio
angular.copy(result, $scope.groups);
$scope.groupsById = { };
$scope.hasLocalGroups = false;
for (var i = 0; i < result.length; i++) {
$scope.groupsById[result[i].id] = result[i];
if (result[i].source === '') $scope.hasLocalGroups = true;
}
if (callback) callback();