|
@@ -38,6 +38,18 @@ function($scope, $location, Cluster, $modal, $rootScope, $routeParams, Permissio
|
|
|
filtered: 0
|
|
|
};
|
|
|
$scope.isNotEmptyFilter = true;
|
|
|
+ $scope.NONE_ROLE = {
|
|
|
+ "permission_label" : $t('common.none'),
|
|
|
+ "permission_name" : "CLUSTER.NONE"
|
|
|
+ };
|
|
|
+ $scope.ALL_ROLE = {
|
|
|
+ "permission_label" : $t('common.all'),
|
|
|
+ "permission_name" : ""
|
|
|
+ };
|
|
|
+ $scope.AMBARI_ADMIN_ROLE = {
|
|
|
+ "permission_label" : $t('users.roles.ambariAdmin'),
|
|
|
+ "permission_name" : "AMBARI.ADMINISTRATOR"
|
|
|
+ };
|
|
|
|
|
|
$scope.pageChanged = function() {
|
|
|
$scope.loadUsers();
|
|
@@ -48,7 +60,6 @@ function($scope, $location, Cluster, $modal, $rootScope, $routeParams, Permissio
|
|
|
|
|
|
$scope.loadUsers = function(){
|
|
|
Cluster.getPrivilegesWithFilters({
|
|
|
- clusterId: $routeParams.id,
|
|
|
nameFilter: $scope.currentNameFilter,
|
|
|
typeFilter: $scope.currentTypeFilter,
|
|
|
roleFilter: $scope.currentRoleFilter,
|
|
@@ -57,96 +68,156 @@ function($scope, $location, Cluster, $modal, $rootScope, $routeParams, Permissio
|
|
|
}).then(function(data) {
|
|
|
$scope.totalUsers = data.itemTotal;
|
|
|
$scope.users = data.items.map(function (user) {
|
|
|
- var name = encodeURIComponent(user.PrivilegeInfo.principal_name);
|
|
|
- var type = user.PrivilegeInfo.principal_type.toLowerCase();
|
|
|
- user.PrivilegeInfo.encoded_name = name;
|
|
|
- user.PrivilegeInfo.url = type == 'user'? (type + 's/' + name) : (type + 's/' + name + '/edit');
|
|
|
- return user.PrivilegeInfo;
|
|
|
+ var privilege = $scope.pickEffectivePrivilege(user.privileges);
|
|
|
+ // Redefine principal_name and principal type in case of None
|
|
|
+ privilege.principal_name = user.Users? user.Users.user_name : user.Groups.group_name;
|
|
|
+ privilege.principal_type = user.Users? 'USER' : 'GROUP';
|
|
|
+ var name = encodeURIComponent(privilege.principal_name);
|
|
|
+ privilege.encoded_name = name;
|
|
|
+ privilege.original_perm = privilege.permission_name;
|
|
|
+ privilege.url = user.Users? ('users/' + name) : ('groups/' + name + '/edit');
|
|
|
+ privilege.editable = Cluster.ineditableRoles.indexOf(privilege.permission_name) == -1;
|
|
|
+ return privilege;
|
|
|
});
|
|
|
$scope.tableInfo.total = data.itemTotal;
|
|
|
$scope.tableInfo.showed = data.items.length;
|
|
|
- $scope.loadRoles();
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ $scope.pickEffectivePrivilege = function(privileges) {
|
|
|
+ var orderedRoles = Cluster.orderedRoles.concat(['VIEW.USER']);
|
|
|
+ if (privileges && privileges.length > 0) {
|
|
|
+ return privileges.reduce(function(prev, cur) {
|
|
|
+ var prevIndex = orderedRoles.indexOf(prev.PrivilegeInfo.permission_name);
|
|
|
+ var curIndex = orderedRoles.indexOf(cur.PrivilegeInfo.permission_name)
|
|
|
+ return (prevIndex < curIndex) ? prev : cur;
|
|
|
+ }).PrivilegeInfo;
|
|
|
+ } else {
|
|
|
+ return angular.copy($scope.NONE_ROLE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$scope.loadRoles = function() {
|
|
|
- Cluster.getPermissions({
|
|
|
- clusterId: $routeParams.id
|
|
|
- }).then(function(data) {
|
|
|
+ Cluster.getPermissions().then(function(data) {
|
|
|
$scope.roles = data.map(function(item) {
|
|
|
return item.PermissionInfo;
|
|
|
});
|
|
|
+ // [All, Administrator, ...roles..., None]
|
|
|
+ $scope.roles.unshift(angular.copy($scope.AMBARI_ADMIN_ROLE));
|
|
|
+ $scope.roles.unshift(angular.copy($scope.ALL_ROLE));
|
|
|
+ $scope.roles.push(angular.copy($scope.NONE_ROLE));
|
|
|
+
|
|
|
+ // create filter select list
|
|
|
+ $scope.roleFilterOptions = angular.copy($scope.roles);
|
|
|
+ $scope.roleFilterOptions.pop(); // filter does not support None
|
|
|
+ $scope.roleFilterOptions = $scope.roleFilterOptions.map(function(o) {
|
|
|
+ return {label: o.permission_label, value: o.permission_name};
|
|
|
+ });
|
|
|
+ $scope.currentRoleFilter = $scope.roleFilterOptions[0];
|
|
|
+
|
|
|
+ // create value select list
|
|
|
+ $scope.roleValueOptions = angular.copy($scope.roles)
|
|
|
+ $scope.roleValueOptions.shift(); // value change does not support all/administrator
|
|
|
+ $scope.roleValueOptions.shift();
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- // TODO change to PUT after it's available
|
|
|
$scope.save = function(user) {
|
|
|
- for (var i = $scope.roles.length; i--;) {
|
|
|
- if ($scope.roles[i].permission_name === user.permission_name) {
|
|
|
- user.permission_label = $scope.roles[i].permission_label;
|
|
|
- break;
|
|
|
- }
|
|
|
+ var fromNone = user.original_perm == $scope.NONE_ROLE.permission_name;
|
|
|
+ if (fromNone) {
|
|
|
+ $scope.addPrivilege(user);
|
|
|
+ return;
|
|
|
}
|
|
|
Cluster.deletePrivilege(
|
|
|
- $routeParams.id,
|
|
|
- user.privilege_id
|
|
|
+ $routeParams.id,
|
|
|
+ user.privilege_id
|
|
|
).then(
|
|
|
function() {
|
|
|
- Cluster.createPrivileges(
|
|
|
- {
|
|
|
- clusterId: $routeParams.id
|
|
|
- },
|
|
|
- [{PrivilegeInfo: {
|
|
|
- permission_name: user.permission_name,
|
|
|
- principal_name: user.principal_name,
|
|
|
- principal_type: user.principal_type
|
|
|
- }}]
|
|
|
- ).then(function() {
|
|
|
- Alert.success($t('users.alerts.roleChanged', {
|
|
|
- name: user.principal_name,
|
|
|
- role: user.permission_label
|
|
|
- }));
|
|
|
- $scope.loadUsers();
|
|
|
- })
|
|
|
- .catch(function(data) {
|
|
|
- Alert.error($t('common.alerts.cannotSavePermissions'), data.data.message);
|
|
|
- $scope.loadUsers();
|
|
|
- });
|
|
|
+ $scope.addPrivilege(user);
|
|
|
}
|
|
|
);
|
|
|
+ };
|
|
|
|
|
|
+ $scope.cancel = function(user) {
|
|
|
+ user.permission_name = user.original_perm;
|
|
|
+ };
|
|
|
+
|
|
|
+ $scope.addPrivilege = function(user) {
|
|
|
+ var changeToNone = user.permission_name == $scope.NONE_ROLE.permission_name;
|
|
|
+ if (changeToNone) {
|
|
|
+ $scope.showSuccess(user);
|
|
|
+ $scope.loadUsers();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Cluster.createPrivileges(
|
|
|
+ {
|
|
|
+ clusterId: $routeParams.id
|
|
|
+ },
|
|
|
+ [{PrivilegeInfo: {
|
|
|
+ permission_name: user.permission_name,
|
|
|
+ principal_name: user.principal_name,
|
|
|
+ principal_type: user.principal_type
|
|
|
+ }}]
|
|
|
+ ).then(function() {
|
|
|
+ $scope.showSuccess(user);
|
|
|
+ $scope.loadUsers();
|
|
|
+ })
|
|
|
+ .catch(function(data) {
|
|
|
+ Alert.error($t('common.alerts.cannotSavePermissions'), data.data.message);
|
|
|
+ $scope.loadUsers();
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ $scope.showSuccess = function(user) {
|
|
|
+ Alert.success($t('users.alerts.roleChanged', {
|
|
|
+ name: user.principal_name,
|
|
|
+ role: $scope.roles.filter(function(r){
|
|
|
+ return r.permission_name == user.permission_name}
|
|
|
+ )[0].permission_label
|
|
|
+ }));
|
|
|
};
|
|
|
|
|
|
$scope.resetPagination = function() {
|
|
|
$scope.currentPage = 1;
|
|
|
$scope.loadUsers();
|
|
|
};
|
|
|
-
|
|
|
- $scope.roleFilterOptions = [
|
|
|
- {label: $t('common.all'), value: ''},
|
|
|
- {label: $t('users.roles.clusterUser'), value: 'CLUSTER.USER'},
|
|
|
- {label: $t('users.roles.clusterAdministrator'), value: 'CLUSTER.ADMINISTRATOR'},
|
|
|
- {label: $t('users.roles.clusterOperator'), value: 'CLUSTER.OPERATOR'},
|
|
|
- {label: $t('users.roles.serviceAdministrator'), value: 'SERVICE.ADMINISTRATOR'},
|
|
|
- {label: $t('users.roles.serviceOperator'), value: 'SERVICE.OPERATOR'}
|
|
|
- ];
|
|
|
- $scope.currentRoleFilter = $scope.roleFilterOptions[0];
|
|
|
+ $scope.currentRoleFilter = { label:$('common.all'), value: '' };
|
|
|
|
|
|
|
|
|
$scope.typeFilterOptions = [
|
|
|
- {label: $t('common.all'), value: ''},
|
|
|
- {label:$t('common.group'), value: 'GROUP'},
|
|
|
- {label: $t('common.user'), value: 'USER'}
|
|
|
+ {label: $t('common.user'), value: 'USER'},
|
|
|
+ {label: $t('common.group'), value: 'GROUP'}
|
|
|
];
|
|
|
+
|
|
|
+ $scope.isUserActive = true;
|
|
|
+
|
|
|
$scope.currentTypeFilter = $scope.typeFilterOptions[0];
|
|
|
|
|
|
- $scope.clearFilters = function () {
|
|
|
+ $scope.switchToUser = function() {
|
|
|
+ if (!$scope.isUserActive) {
|
|
|
+ $scope.currentTypeFilter = $scope.typeFilterOptions[0];
|
|
|
+ $scope.isUserActive = true;
|
|
|
+ $scope.resetPagination();
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ $scope.switchToGroup = function() {
|
|
|
+ if ($scope.isUserActive) {
|
|
|
+ $scope.currentTypeFilter = $scope.typeFilterOptions[1];
|
|
|
+ $scope.isUserActive = false;
|
|
|
+ $scope.resetPagination();
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ $scope.clearFilters = function() {
|
|
|
$scope.currentNameFilter = '';
|
|
|
+ $scope.isUserActive = true;
|
|
|
$scope.currentTypeFilter = $scope.typeFilterOptions[0];
|
|
|
$scope.currentRoleFilter = $scope.roleFilterOptions[0];
|
|
|
$scope.resetPagination();
|
|
|
};
|
|
|
|
|
|
+ $scope.loadRoles();
|
|
|
$scope.loadUsers();
|
|
|
|
|
|
$scope.$watch(
|