|
|
// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
|
|
|
//
|
|
|
// 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.
|
|
|
|
|
|
angular.module('appenlight.controllers')
|
|
|
.controller('ApplicationPermissionsController', ApplicationPermissionsController);
|
|
|
|
|
|
ApplicationPermissionsController.$inject = ['sectionViewResource',
|
|
|
'applicationsPropertyResource', 'groupsResource']
|
|
|
|
|
|
|
|
|
function ApplicationPermissionsController(sectionViewResource, applicationsPropertyResource , groupsResource) {
|
|
|
var vm = this;
|
|
|
vm.$onInit = function () {
|
|
|
vm.form = {
|
|
|
autocompleteUser: '',
|
|
|
selectedGroup: null,
|
|
|
selectedUserPermissions: {},
|
|
|
selectedGroupPermissions: {}
|
|
|
}
|
|
|
vm.possibleGroups = groupsResource.query(null, function () {
|
|
|
if (vm.possibleGroups.length > 0) {
|
|
|
vm.form.selectedGroup = vm.possibleGroups[0].id;
|
|
|
}
|
|
|
});
|
|
|
console.log('g', vm.possibleGroups);
|
|
|
vm.possibleUsers = [];
|
|
|
_.each(vm.resource.possible_permissions, function (perm) {
|
|
|
vm.form.selectedUserPermissions[perm] = false;
|
|
|
vm.form.selectedGroupPermissions[perm] = false;
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* Converts the permission list into {user, permission_list objects}
|
|
|
* for rendering in templates
|
|
|
* **/
|
|
|
var tmpObj = {
|
|
|
user: {},
|
|
|
group: {}
|
|
|
};
|
|
|
_.each(vm.currentPermissions, function (perm) {
|
|
|
console.log(perm);
|
|
|
if (perm.type == 'user') {
|
|
|
if (typeof tmpObj[perm.type][perm.user_name] === 'undefined') {
|
|
|
tmpObj[perm.type][perm.user_name] = {
|
|
|
self: perm,
|
|
|
permissions: []
|
|
|
}
|
|
|
}
|
|
|
if (tmpObj[perm.type][perm.user_name].permissions.indexOf(perm.perm_name) === -1) {
|
|
|
tmpObj[perm.type][perm.user_name].permissions.push(perm.perm_name);
|
|
|
}
|
|
|
} else {
|
|
|
if (typeof tmpObj[perm.type][perm.group_name] === 'undefined') {
|
|
|
tmpObj[perm.type][perm.group_name] = {
|
|
|
self: perm,
|
|
|
permissions: []
|
|
|
}
|
|
|
}
|
|
|
if (tmpObj[perm.type][perm.group_name].permissions.indexOf(perm.perm_name) === -1) {
|
|
|
tmpObj[perm.type][perm.group_name].permissions.push(perm.perm_name);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
});
|
|
|
vm.currentPermissions = {
|
|
|
user: _.values(tmpObj.user),
|
|
|
group: _.values(tmpObj.group),
|
|
|
};
|
|
|
console.log('test', tmpObj, vm.currentPermissions);
|
|
|
}
|
|
|
|
|
|
|
|
|
vm.searchUsers = function (searchPhrase) {
|
|
|
console.log('SEARCHING');
|
|
|
vm.searchingUsers = true;
|
|
|
return sectionViewResource.query({
|
|
|
section: 'users_section',
|
|
|
view: 'search_users',
|
|
|
'user_name': searchPhrase
|
|
|
}).$promise.then(function (data) {
|
|
|
vm.searchingUsers = false;
|
|
|
return _.map(data, function (item) {
|
|
|
return item;
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
|
|
|
|
|
|
vm.setGroupPermission = function(){
|
|
|
var POSTObj = {
|
|
|
'group_id': vm.form.selectedGroup,
|
|
|
'permissions': []
|
|
|
};
|
|
|
for (var key in vm.form.selectedGroupPermissions) {
|
|
|
if (vm.form.selectedGroupPermissions[key]) {
|
|
|
POSTObj.permissions.push(key)
|
|
|
}
|
|
|
}
|
|
|
applicationsPropertyResource.save({
|
|
|
key: 'group_permissions',
|
|
|
resourceId: vm.resource.resource_id
|
|
|
}, POSTObj,
|
|
|
function (data) {
|
|
|
var found_row = false;
|
|
|
_.each(vm.currentPermissions.group, function (perm) {
|
|
|
if (perm.self.group_id == data.group.id) {
|
|
|
perm['permissions'] = data['permissions'];
|
|
|
found_row = true;
|
|
|
}
|
|
|
});
|
|
|
if (!found_row) {
|
|
|
data.self = data.group;
|
|
|
// normalize data format
|
|
|
data.self.group_id = data.self.id;
|
|
|
vm.currentPermissions.group.push(data);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
vm.setUserPermission = function () {
|
|
|
console.log('set permissions');
|
|
|
var POSTObj = {
|
|
|
'user_name': vm.form.autocompleteUser,
|
|
|
'permissions': []
|
|
|
};
|
|
|
for (var key in vm.form.selectedUserPermissions) {
|
|
|
if (vm.form.selectedUserPermissions[key]) {
|
|
|
POSTObj.permissions.push(key)
|
|
|
}
|
|
|
}
|
|
|
applicationsPropertyResource.save({
|
|
|
key: 'user_permissions',
|
|
|
resourceId: vm.resource.resource_id
|
|
|
}, POSTObj,
|
|
|
function (data) {
|
|
|
var found_row = false;
|
|
|
_.each(vm.currentPermissions.user, function (perm) {
|
|
|
if (perm.self.user_name == data['user_name']) {
|
|
|
perm['permissions'] = data['permissions'];
|
|
|
found_row = true;
|
|
|
}
|
|
|
});
|
|
|
if (!found_row) {
|
|
|
data.self = data;
|
|
|
vm.currentPermissions.user.push(data);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
vm.removeUserPermission = function (perm_name, curr_perm) {
|
|
|
console.log(perm_name);
|
|
|
console.log(curr_perm);
|
|
|
var POSTObj = {
|
|
|
key: 'user_permissions',
|
|
|
user_name: curr_perm.self.user_name,
|
|
|
permissions: [perm_name],
|
|
|
resourceId: vm.resource.resource_id
|
|
|
}
|
|
|
applicationsPropertyResource.delete(POSTObj, function (data) {
|
|
|
_.each(vm.currentPermissions.user, function (perm) {
|
|
|
if (perm.self.user_name == data['user_name']) {
|
|
|
perm['permissions'] = data['permissions']
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
vm.removeGroupPermission = function (perm_name, curr_perm) {
|
|
|
console.log('g', curr_perm);
|
|
|
var POSTObj = {
|
|
|
key: 'group_permissions',
|
|
|
group_id: curr_perm.self.group_id,
|
|
|
permissions: [perm_name],
|
|
|
resourceId: vm.resource.resource_id
|
|
|
}
|
|
|
applicationsPropertyResource.delete(POSTObj, function (data) {
|
|
|
_.each(vm.currentPermissions.group, function (perm) {
|
|
|
if (perm.self.group_id == data.group.id) {
|
|
|
perm['permissions'] = data['permissions']
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
angular.module('appenlight.directives.permissionsForm',[])
|
|
|
.directive('permissionsForm', function () {
|
|
|
return {
|
|
|
"restrict": "E",
|
|
|
"controller": "ApplicationPermissionsController",
|
|
|
controllerAs: 'permissions',
|
|
|
bindToController: true,
|
|
|
scope: {
|
|
|
currentPermissions: '=',
|
|
|
possiblePermissions: '=',
|
|
|
resource: '='
|
|
|
},
|
|
|
templateUrl: 'directives/permissions/permissions.html'
|
|
|
}
|
|
|
})
|
|
|
|