You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by vn...@apache.org on 2017/07/14 19:39:16 UTC
[3/4] incubator-guacamole-client git commit: GUACAMOLE-338:
Automatically expand connections or connection groups which are ancestors of
objects for which the user being modified already has READ permission.
GUACAMOLE-338: Automatically expand connections or connection groups which are ancestors of objects for which the user being modified already has READ permission.
Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/970e50d0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/970e50d0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/970e50d0
Branch: refs/heads/master
Commit: 970e50d0c6c9a0c4933c959f144681342cf4ac64
Parents: 5c4188e
Author: Michael Jumper <mj...@apache.org>
Authored: Mon Jul 3 16:57:41 2017 -0700
Committer: Michael Jumper <mj...@apache.org>
Committed: Mon Jul 3 16:57:41 2017 -0700
----------------------------------------------------------------------
.../manage/controllers/manageUserController.js | 77 +++++++++++++++++++-
1 file changed, 75 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/970e50d0/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
index 7f50e43..dd69391 100644
--- a/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
+++ b/guacamole/src/main/webapp/app/manage/controllers/manageUserController.js
@@ -25,6 +25,7 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
// Required types
var ConnectionGroup = $injector.get('ConnectionGroup');
+ var GroupListItem = $injector.get('GroupListItem');
var PageDefinition = $injector.get('PageDefinition');
var PermissionFlagSet = $injector.get('PermissionFlagSet');
var PermissionSet = $injector.get('PermissionSet');
@@ -133,7 +134,7 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
* thost data sources. As only one data source is applicable to any one
* user being edited/created, this will only contain a single key.
*
- * @type Object.<String, ConnectionGroup>
+ * @type Object.<String, GroupListItem>
*/
$scope.rootGroups = null;
@@ -607,6 +608,59 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
}
+ /**
+ * Expands all items within the tree descending from the given
+ * GroupListItem which have at least one descendant for which explicit READ
+ * permission is granted. The expanded state of all other items is left
+ * untouched.
+ *
+ * @param {GroupListItem} item
+ * The GroupListItem which should be conditionally expanded depending
+ * on whether READ permission is granted for any of its descendants.
+ *
+ * @param {PemissionFlagSet} flags
+ * The set of permissions which should be used to determine whether the
+ * given item and its descendants are expanded.
+ */
+ var expandReadable = function expandReadable(item, flags) {
+
+ // If the current item is expandable and has defined children,
+ // determine whether it should be expanded
+ if (item.expandable && item.children) {
+ angular.forEach(item.children, function expandReadableChild(child) {
+
+ // Determine whether the user has READ permission for the
+ // current child object
+ var readable = false;
+ switch (child.type) {
+
+ case GroupListItem.Type.CONNECTION:
+ readable = flags.connectionPermissions.READ[child.identifier];
+ break;
+
+ case GroupListItem.Type.CONNECTION_GROUP:
+ readable = flags.connectionGroupPermissions.READ[child.identifier];
+ break;
+
+ case GroupListItem.Type.SHARING_PROFILE:
+ readable = flags.sharingProfilePermissions.READ[child.identifier];
+ break;
+
+ }
+
+ // The parent should be expanded by default if the child is
+ // expanded by default OR the user has READ permission on the
+ // child
+ item.expanded |= expandReadable(child, flags) || readable;
+
+ });
+ }
+
+ return item.expanded;
+
+ };
+
+
// Retrieve all connections for which we have ADMINISTER permission
dataSourceService.apply(
connectionGroupService.getConnectionGroupTree,
@@ -615,7 +669,13 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
[PermissionSet.ObjectPermissionType.ADMINISTER]
)
.then(function connectionGroupReceived(rootGroups) {
- $scope.rootGroups = rootGroups;
+
+ // Convert all received ConnectionGroup objects into GroupListItems
+ $scope.rootGroups = {};
+ angular.forEach(rootGroups, function addGroupListItem(rootGroup, dataSource) {
+ $scope.rootGroups[dataSource] = GroupListItem.fromConnectionGroup(dataSource, rootGroup);
+ });
+
});
// Query the user's permissions for the current user
@@ -628,6 +688,19 @@ angular.module('manage').controller('manageUserController', ['$scope', '$injecto
$scope.permissions = permissions;
});
+ // Update default expanded state whenever connection groups and associated
+ // permissions change
+ $scope.$watchGroup(['rootGroups', 'permissionFlags'], function updateDefaultExpandedStates() {
+ angular.forEach($scope.rootGroups, function updateExpandedStates(rootGroup) {
+
+ // Automatically expand all objects with any descendants for which
+ // the user has READ permission
+ if ($scope.permissionFlags)
+ expandReadable(rootGroup, $scope.permissionFlags);
+
+ });
+ });
+
/**
* Available system permission types, as translation string / internal
* value pairs.