|
|
|
@@ -36,8 +36,11 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the URL for the REST resource most appropriate for accessing
|
|
|
|
|
* the permissions of the user having the given username.
|
|
|
|
|
*
|
|
|
|
|
* the effective permissions of the user having the given username.
|
|
|
|
|
* Effective permissions differ from the permissions returned via
|
|
|
|
|
* getPermissions() in that permissions which are not directly granted to
|
|
|
|
|
* the user are included.
|
|
|
|
|
*
|
|
|
|
|
* It is important to note that a particular data source can authenticate
|
|
|
|
|
* and provide permissions for a user, even if that user does not exist
|
|
|
|
|
* within that data source (and thus cannot be found beneath
|
|
|
|
@@ -56,7 +59,7 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
* The URL for the REST resource representing the user having the given
|
|
|
|
|
* username.
|
|
|
|
|
*/
|
|
|
|
|
var getPermissionsResourceURL = function getPermissionsResourceURL(dataSource, username) {
|
|
|
|
|
var getEffectivePermissionsResourceURL = function getEffectivePermissionsResourceURL(dataSource, username) {
|
|
|
|
|
|
|
|
|
|
// Create base URL for data source
|
|
|
|
|
var base = 'api/session/data/' + encodeURIComponent(dataSource);
|
|
|
|
@@ -65,19 +68,21 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
// user actually existing (they may not). Access their permissions via
|
|
|
|
|
// "self" rather than the collection of defined users.
|
|
|
|
|
if (username === authenticationService.getCurrentUsername())
|
|
|
|
|
return base + '/self/permissions';
|
|
|
|
|
return base + '/self/effectivePermissions';
|
|
|
|
|
|
|
|
|
|
// Otherwise, the user must exist for their permissions to be
|
|
|
|
|
// accessible. Use the collection of defined users.
|
|
|
|
|
return base + '/users/' + encodeURIComponent(username) + '/permissions';
|
|
|
|
|
return base + '/users/' + encodeURIComponent(username) + '/effectivePermissions';
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Makes a request to the REST API to get the list of permissions for a
|
|
|
|
|
* given user, returning a promise that provides an array of
|
|
|
|
|
* @link{Permission} objects if successful.
|
|
|
|
|
*
|
|
|
|
|
* Makes a request to the REST API to get the list of effective permissions
|
|
|
|
|
* for a given user, returning a promise that provides an array of
|
|
|
|
|
* @link{Permission} objects if successful. Effective permissions differ
|
|
|
|
|
* from the permissions returned via getPermissions() in that permissions
|
|
|
|
|
* which are not directly granted to the user are included.
|
|
|
|
|
*
|
|
|
|
|
* @param {String} dataSource
|
|
|
|
|
* The unique identifier of the data source containing the user whose
|
|
|
|
|
* permissions should be retrieved. This identifier corresponds to an
|
|
|
|
@@ -85,12 +90,12 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
*
|
|
|
|
|
* @param {String} userID
|
|
|
|
|
* The ID of the user to retrieve the permissions for.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @returns {Promise.<PermissionSet>}
|
|
|
|
|
* A promise which will resolve with a @link{PermissionSet} upon
|
|
|
|
|
* success.
|
|
|
|
|
*/
|
|
|
|
|
service.getPermissions = function getPermissions(dataSource, userID) {
|
|
|
|
|
service.getEffectivePermissions = function getEffectivePermissions(dataSource, userID) {
|
|
|
|
|
|
|
|
|
|
// Build HTTP parameters set
|
|
|
|
|
var httpParameters = {
|
|
|
|
@@ -101,58 +106,89 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
return $http({
|
|
|
|
|
cache : cacheService.users,
|
|
|
|
|
method : 'GET',
|
|
|
|
|
url : getPermissionsResourceURL(dataSource, userID),
|
|
|
|
|
url : getEffectivePermissionsResourceURL(dataSource, userID),
|
|
|
|
|
params : httpParameters
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Makes a request to the REST API to add permissions for a given user,
|
|
|
|
|
* returning a promise that can be used for processing the results of the
|
|
|
|
|
* call.
|
|
|
|
|
* Returns the URL for the REST resource most appropriate for accessing
|
|
|
|
|
* the permissions of the user having the given identifier. The permissions
|
|
|
|
|
* retrieved differ from effective permissions (those returned by
|
|
|
|
|
* getEffectivePermissions()) in that only permissions which are directly
|
|
|
|
|
* granted to the user are included.
|
|
|
|
|
*
|
|
|
|
|
* It is important to note that a particular data source can authenticate
|
|
|
|
|
* and provide permissions for a user, even if that user does not exist
|
|
|
|
|
* within that data source (and thus cannot be found beneath
|
|
|
|
|
* "api/session/data/{dataSource}/users")
|
|
|
|
|
*
|
|
|
|
|
* @param {String} dataSource
|
|
|
|
|
* The unique identifier of the data source containing the user whose
|
|
|
|
|
* permissions should be modified. This identifier corresponds to an
|
|
|
|
|
* permissions should be retrieved. This identifier corresponds to an
|
|
|
|
|
* AuthenticationProvider within the Guacamole web application.
|
|
|
|
|
*
|
|
|
|
|
* @param {String} userID
|
|
|
|
|
* The ID of the user to modify the permissions of.
|
|
|
|
|
*
|
|
|
|
|
* @param {PermissionSet} permissions
|
|
|
|
|
* The set of permissions to add.
|
|
|
|
|
*
|
|
|
|
|
* @returns {Promise}
|
|
|
|
|
* A promise for the HTTP call which will succeed if and only if the
|
|
|
|
|
* add operation is successful.
|
|
|
|
|
* @param {String} identifier
|
|
|
|
|
* The identifier of the user for which the URL of the proper REST
|
|
|
|
|
* resource should be derived.
|
|
|
|
|
*
|
|
|
|
|
* @returns {String}
|
|
|
|
|
* The URL for the REST resource representing the user having the given
|
|
|
|
|
* identifier.
|
|
|
|
|
*/
|
|
|
|
|
service.addPermissions = function addPermissions(dataSource, userID, permissions) {
|
|
|
|
|
return service.patchPermissions(dataSource, userID, permissions, null);
|
|
|
|
|
var getPermissionsResourceURL = function getPermissionsResourceURL(dataSource, identifier) {
|
|
|
|
|
|
|
|
|
|
// Create base URL for data source
|
|
|
|
|
var base = 'api/session/data/' + encodeURIComponent(dataSource);
|
|
|
|
|
|
|
|
|
|
// If the username is that of the current user, do not rely on the
|
|
|
|
|
// user actually existing (they may not). Access their permissions via
|
|
|
|
|
// "self" rather than the collection of defined users.
|
|
|
|
|
if (identifier === authenticationService.getCurrentUsername())
|
|
|
|
|
return base + '/self/permissions';
|
|
|
|
|
|
|
|
|
|
// Otherwise, the user must exist for their permissions to be
|
|
|
|
|
// accessible. Use the collection of defined users.
|
|
|
|
|
return base + '/users/' + encodeURIComponent(identifier) + '/permissions';
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Makes a request to the REST API to remove permissions for a given user,
|
|
|
|
|
* returning a promise that can be used for processing the results of the
|
|
|
|
|
* call.
|
|
|
|
|
* Makes a request to the REST API to get the list of permissions for a
|
|
|
|
|
* given user, returning a promise that provides an array of
|
|
|
|
|
* @link{Permission} objects if successful. The permissions retrieved
|
|
|
|
|
* differ from effective permissions (those returned by
|
|
|
|
|
* getEffectivePermissions()) in that only permissions which are directly
|
|
|
|
|
* granted to the user included.
|
|
|
|
|
*
|
|
|
|
|
* @param {String} dataSource
|
|
|
|
|
* The unique identifier of the data source containing the user whose
|
|
|
|
|
* permissions should be modified. This identifier corresponds to an
|
|
|
|
|
* permissions should be retrieved. This identifier corresponds to an
|
|
|
|
|
* AuthenticationProvider within the Guacamole web application.
|
|
|
|
|
*
|
|
|
|
|
* @param {String} userID
|
|
|
|
|
* The ID of the user to modify the permissions of.
|
|
|
|
|
*
|
|
|
|
|
* @param {PermissionSet} permissions
|
|
|
|
|
* The set of permissions to remove.
|
|
|
|
|
*
|
|
|
|
|
* @returns {Promise}
|
|
|
|
|
* A promise for the HTTP call which will succeed if and only if the
|
|
|
|
|
* remove operation is successful.
|
|
|
|
|
* @param {String} identifier
|
|
|
|
|
* The identifier of the user to retrieve the permissions for.
|
|
|
|
|
*
|
|
|
|
|
* @returns {Promise.<PermissionSet>}
|
|
|
|
|
* A promise which will resolve with a @link{PermissionSet} upon
|
|
|
|
|
* success.
|
|
|
|
|
*/
|
|
|
|
|
service.removePermissions = function removePermissions(dataSource, userID, permissions) {
|
|
|
|
|
return service.patchPermissions(dataSource, userID, null, permissions);
|
|
|
|
|
service.getPermissions = function getPermissions(dataSource, identifier) {
|
|
|
|
|
|
|
|
|
|
// Build HTTP parameters set
|
|
|
|
|
var httpParameters = {
|
|
|
|
|
token : authenticationService.getCurrentToken()
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Retrieve user permissions
|
|
|
|
|
return $http({
|
|
|
|
|
cache : cacheService.users,
|
|
|
|
|
method : 'GET',
|
|
|
|
|
url : getPermissionsResourceURL(dataSource, identifier),
|
|
|
|
|
params : httpParameters
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@@ -240,27 +276,30 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
/**
|
|
|
|
|
* Makes a request to the REST API to modify the permissions for a given
|
|
|
|
|
* user, returning a promise that can be used for processing the results of
|
|
|
|
|
* the call.
|
|
|
|
|
* the call. This request affects only the permissions directly granted to
|
|
|
|
|
* the user, and may not affect permissions inherited through other means
|
|
|
|
|
* (effective permissions).
|
|
|
|
|
*
|
|
|
|
|
* @param {String} dataSource
|
|
|
|
|
* The unique identifier of the data source containing the user whose
|
|
|
|
|
* permissions should be modified. This identifier corresponds to an
|
|
|
|
|
* AuthenticationProvider within the Guacamole web application.
|
|
|
|
|
*
|
|
|
|
|
* @param {String} userID
|
|
|
|
|
* The ID of the user to modify the permissions of.
|
|
|
|
|
* @param {String} identifier
|
|
|
|
|
* The identifier of the user to modify the permissions of.
|
|
|
|
|
*
|
|
|
|
|
* @param {PermissionSet} [permissionsToAdd]
|
|
|
|
|
* The set of permissions to add, if any.
|
|
|
|
|
*
|
|
|
|
|
* @param {PermissionSet} [permissionsToRemove]
|
|
|
|
|
* The set of permissions to remove, if any.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @returns {Promise}
|
|
|
|
|
* A promise for the HTTP call which will succeed if and only if the
|
|
|
|
|
* patch operation is successful.
|
|
|
|
|
*/
|
|
|
|
|
service.patchPermissions = function patchPermissions(dataSource, userID, permissionsToAdd, permissionsToRemove) {
|
|
|
|
|
service.patchPermissions = function patchPermissions(dataSource, identifier,
|
|
|
|
|
permissionsToAdd, permissionsToRemove) {
|
|
|
|
|
|
|
|
|
|
var permissionPatch = [];
|
|
|
|
|
|
|
|
|
@@ -278,7 +317,7 @@ angular.module('rest').factory('permissionService', ['$injector',
|
|
|
|
|
// Patch user permissions
|
|
|
|
|
return $http({
|
|
|
|
|
method : 'PATCH',
|
|
|
|
|
url : getPermissionsResourceURL(dataSource, userID),
|
|
|
|
|
url : getPermissionsResourceURL(dataSource, identifier),
|
|
|
|
|
params : httpParameters,
|
|
|
|
|
data : permissionPatch
|
|
|
|
|
})
|
|
|
|
|