Merge "Add Enable/Disable User action for Angular users panel"
This commit is contained in:
commit
a054bb121e
@ -36,6 +36,8 @@
|
|||||||
'horizon.dashboard.identity.users.actions.create.service',
|
'horizon.dashboard.identity.users.actions.create.service',
|
||||||
'horizon.dashboard.identity.users.actions.update.service',
|
'horizon.dashboard.identity.users.actions.update.service',
|
||||||
'horizon.dashboard.identity.users.actions.password.service',
|
'horizon.dashboard.identity.users.actions.password.service',
|
||||||
|
'horizon.dashboard.identity.users.actions.enable.service',
|
||||||
|
'horizon.dashboard.identity.users.actions.disable.service',
|
||||||
'horizon.dashboard.identity.users.actions.delete.service',
|
'horizon.dashboard.identity.users.actions.delete.service',
|
||||||
'horizon.dashboard.identity.users.resourceType'
|
'horizon.dashboard.identity.users.resourceType'
|
||||||
];
|
];
|
||||||
@ -45,6 +47,8 @@
|
|||||||
createService,
|
createService,
|
||||||
updateService,
|
updateService,
|
||||||
passwordService,
|
passwordService,
|
||||||
|
enableService,
|
||||||
|
disableService,
|
||||||
deleteService,
|
deleteService,
|
||||||
userResourceTypeCode
|
userResourceTypeCode
|
||||||
) {
|
) {
|
||||||
@ -67,6 +71,22 @@
|
|||||||
type: 'row'
|
type: 'row'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.append({
|
||||||
|
id: 'enableAction',
|
||||||
|
service: enableService,
|
||||||
|
template: {
|
||||||
|
text: gettext('Enable User'),
|
||||||
|
type: 'row'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.append({
|
||||||
|
id: 'disableAction',
|
||||||
|
service: disableService,
|
||||||
|
template: {
|
||||||
|
text: gettext('Disable User'),
|
||||||
|
type: 'row'
|
||||||
|
}
|
||||||
|
})
|
||||||
.append({
|
.append({
|
||||||
id: 'deleteAction',
|
id: 'deleteAction',
|
||||||
service: deleteService,
|
service: deleteService,
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
/**
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular
|
||||||
|
.module('horizon.dashboard.identity.users')
|
||||||
|
.factory('horizon.dashboard.identity.users.actions.disable.service', disableService);
|
||||||
|
|
||||||
|
disableService.$inject = [
|
||||||
|
'$q',
|
||||||
|
'horizon.dashboard.identity.users.resourceType',
|
||||||
|
'horizon.app.core.openstack-service-api.keystone',
|
||||||
|
'horizon.app.core.openstack-service-api.policy',
|
||||||
|
'horizon.framework.util.actions.action-result.service',
|
||||||
|
'horizon.framework.util.q.extensions',
|
||||||
|
'horizon.framework.widgets.toast.service'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ngDoc factory
|
||||||
|
* @name horizon.dashboard.identity.users.actions.disable.service
|
||||||
|
* @Description A service to disable the user.
|
||||||
|
*/
|
||||||
|
function disableService(
|
||||||
|
$q,
|
||||||
|
resourceType,
|
||||||
|
keystone,
|
||||||
|
policy,
|
||||||
|
actionResultService,
|
||||||
|
$qExtensions,
|
||||||
|
toast
|
||||||
|
) {
|
||||||
|
var message = {
|
||||||
|
success: gettext('User %s was successfully disabled.')
|
||||||
|
};
|
||||||
|
|
||||||
|
var service = {
|
||||||
|
allowed: allowed,
|
||||||
|
perform: perform
|
||||||
|
};
|
||||||
|
|
||||||
|
return service;
|
||||||
|
|
||||||
|
//////////////
|
||||||
|
|
||||||
|
function allowed(selected) {
|
||||||
|
return $q.all([
|
||||||
|
$qExtensions.booleanAsPromise(selected.enabled),
|
||||||
|
policy.ifAllowed({ rules: [['identity', 'identity:update_user']] })
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function perform(selected) {
|
||||||
|
return keystone.editUser({id: selected.id, enabled: false}).then(success);
|
||||||
|
function success() {
|
||||||
|
toast.add('success', interpolate(message.success, [selected.name]));
|
||||||
|
return actionResultService.getActionResult()
|
||||||
|
.updated(resourceType, selected.id)
|
||||||
|
.result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
describe('horizon.dashboard.identity.users.actions.disable.service', function() {
|
||||||
|
|
||||||
|
var $q, $scope, service, keystone, policy;
|
||||||
|
var selected = {
|
||||||
|
id: '1',
|
||||||
|
enabled: true
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(module('horizon.app.core'));
|
||||||
|
beforeEach(module('horizon.framework'));
|
||||||
|
beforeEach(module('horizon.dashboard.identity.users'));
|
||||||
|
|
||||||
|
beforeEach(inject(function($injector, _$rootScope_, _$q_) {
|
||||||
|
$scope = _$rootScope_.$new();
|
||||||
|
$q = _$q_;
|
||||||
|
service = $injector.get('horizon.dashboard.identity.users.actions.disable.service');
|
||||||
|
keystone = $injector.get('horizon.app.core.openstack-service-api.keystone');
|
||||||
|
var deferred = $q.defer();
|
||||||
|
spyOn(keystone, 'editUser').and.returnValue(deferred.promise);
|
||||||
|
deferred.resolve({});
|
||||||
|
policy = $injector.get('horizon.app.core.openstack-service-api.policy');
|
||||||
|
var allowedPromise = $q.defer();
|
||||||
|
spyOn(policy, 'ifAllowed').and.returnValue(allowedPromise.promise);
|
||||||
|
allowedPromise.resolve({allowed: true});
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should check the policy', function() {
|
||||||
|
var allowed = service.allowed(selected);
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
|
expect(allowed).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call keystone.editUser', function() {
|
||||||
|
service.perform(selected);
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
|
expect(keystone.editUser).toHaveBeenCalledWith({id: selected.id, enabled: false});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
@ -0,0 +1,76 @@
|
|||||||
|
/**
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular
|
||||||
|
.module('horizon.dashboard.identity.users')
|
||||||
|
.factory('horizon.dashboard.identity.users.actions.enable.service', enableService);
|
||||||
|
|
||||||
|
enableService.$inject = [
|
||||||
|
'$q',
|
||||||
|
'horizon.dashboard.identity.users.resourceType',
|
||||||
|
'horizon.app.core.openstack-service-api.keystone',
|
||||||
|
'horizon.app.core.openstack-service-api.policy',
|
||||||
|
'horizon.framework.util.actions.action-result.service',
|
||||||
|
'horizon.framework.util.q.extensions',
|
||||||
|
'horizon.framework.widgets.toast.service'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ngDoc factory
|
||||||
|
* @name horizon.dashboard.identity.users.actions.enable.service
|
||||||
|
* @Description A service to enable the user.
|
||||||
|
*/
|
||||||
|
function enableService(
|
||||||
|
$q,
|
||||||
|
resourceType,
|
||||||
|
keystone,
|
||||||
|
policy,
|
||||||
|
actionResultService,
|
||||||
|
$qExtensions,
|
||||||
|
toast
|
||||||
|
) {
|
||||||
|
var message = {
|
||||||
|
success: gettext('User %s was successfully enabled.')
|
||||||
|
};
|
||||||
|
|
||||||
|
var service = {
|
||||||
|
allowed: allowed,
|
||||||
|
perform: perform
|
||||||
|
};
|
||||||
|
|
||||||
|
return service;
|
||||||
|
|
||||||
|
//////////////
|
||||||
|
|
||||||
|
function allowed(selected) {
|
||||||
|
return $q.all([
|
||||||
|
$qExtensions.booleanAsPromise(!selected.enabled),
|
||||||
|
policy.ifAllowed({ rules: [['identity', 'identity:update_user']] })
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function perform(selected) {
|
||||||
|
return keystone.editUser({id: selected.id, enabled: true}).then(success);
|
||||||
|
function success() {
|
||||||
|
toast.add('success', interpolate(message.success, [selected.name]));
|
||||||
|
return actionResultService.getActionResult()
|
||||||
|
.updated(resourceType, selected.id)
|
||||||
|
.result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
@ -0,0 +1,58 @@
|
|||||||
|
/**
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License. You may obtain
|
||||||
|
* a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
describe('horizon.dashboard.identity.users.actions.enable.service', function() {
|
||||||
|
|
||||||
|
var $q, $scope, service, keystone, policy;
|
||||||
|
var selected = {
|
||||||
|
id: '1',
|
||||||
|
enabled: false
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(module('horizon.app.core'));
|
||||||
|
beforeEach(module('horizon.framework'));
|
||||||
|
beforeEach(module('horizon.dashboard.identity.users'));
|
||||||
|
|
||||||
|
beforeEach(inject(function($injector, _$rootScope_, _$q_) {
|
||||||
|
$scope = _$rootScope_.$new();
|
||||||
|
$q = _$q_;
|
||||||
|
service = $injector.get('horizon.dashboard.identity.users.actions.enable.service');
|
||||||
|
keystone = $injector.get('horizon.app.core.openstack-service-api.keystone');
|
||||||
|
var deferred = $q.defer();
|
||||||
|
spyOn(keystone, 'editUser').and.returnValue(deferred.promise);
|
||||||
|
deferred.resolve({});
|
||||||
|
policy = $injector.get('horizon.app.core.openstack-service-api.policy');
|
||||||
|
var allowedPromise = $q.defer();
|
||||||
|
spyOn(policy, 'ifAllowed').and.returnValue(allowedPromise.promise);
|
||||||
|
allowedPromise.resolve({allowed: true});
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should check the policy', function() {
|
||||||
|
var allowed = service.allowed(selected);
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
|
expect(allowed).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call keystone.editUser', function() {
|
||||||
|
service.perform(selected);
|
||||||
|
$scope.$apply();
|
||||||
|
|
||||||
|
expect(keystone.editUser).toHaveBeenCalledWith({id: selected.id, enabled: true});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
Loading…
x
Reference in New Issue
Block a user