Skip to content
Snippets Groups Projects
Commit 72b31c8f authored by Piotr Gawron's avatar Piotr Gawron
Browse files

visualization of user project privileges

parent c071ceee
No related branches found
No related tags found
2 merge requests!115Resolve "admin panel should use API",!114Resolve "admin panel should use API"
......@@ -114,6 +114,10 @@ Configuration.prototype.setPrivilegeTypes = function(privilegeTypes) {
}
};
Configuration.prototype.getPrivilegeTypes = function() {
return this._privilegeTypes;
};
Configuration.prototype.getMiriamTypeByName = function(name) {
var self = this;
for (var i = 0; i < self._miriamTypes.length; i++) {
......
......@@ -347,19 +347,88 @@ EditProjectDialog.prototype.createUsersTab = function(tabMenuDiv, tabContentDiv)
};
EditProjectDialog.prototype.createUsersTabContent = function() {
return Functions.createElement({
var self = this;
var result = Functions.createElement({
type : "div",
content : "Bye",
style : "margin-top:10px;",
});
var usersTable = Functions.createElement({
type : "table",
name : "usersTable",
className : "display",
style : "width:100%",
});
result.appendChild(usersTable);
$(usersTable).on("click", "[name='saveUser']", function() {
var button = this;
GuiConnector.showProcessing("Updating");
return self.saveUser($(button).attr("data")).then(function() {
GuiConnector.hideProcessing();
GuiConnector.info("User updated successfully");
}, function(error) {
GuiConnector.hideProcessing();
GuiConnector.alert(error);
});
});
return result;
};
EditProjectDialog.prototype.createUserPrivilegeColumns = function() {
var self = this;
if (self._userPrivilegeColumns !== undefined) {
return Promise.resolve(self._userPrivilegeColumns);
}
return ServerConnector.getConfiguration().then(function(configuration) {
self._userPrivilegeColumns = [ {
title : "Name"
} ];
var privilegeTypes = configuration.getPrivilegeTypes();
for (var i = 0; i < privilegeTypes.length; i++) {
var type = privilegeTypes[i];
if (type.getObjectType() === "Project") {
self._userPrivilegeColumns.push({
"title" : type.getCommonName(),
privilegeType : type,
});
}
}
self._userPrivilegeColumns.push({
"title" : "Update"
});
return self._userPrivilegeColumns;
});
};
EditProjectDialog.prototype.init = function() {
var self = this;
return self.refreshOverlays().then(function() {
return self.initUsersTab().then(function() {
return self.refreshUsers();
}).then(function() {
return self.refreshOverlays();
}).then(function() {
$(window).trigger('resize');
});
};
EditProjectDialog.prototype.initUsersTab = function() {
var self = this;
var usersTable = $("[name=usersTable]", self.getElement())[0];
return self.createUserPrivilegeColumns().then(function(columns) {
$(usersTable).DataTable({
columns : columns,
});
});
};
EditProjectDialog.prototype.refreshOverlays = function() {
var self = this;
return ServerConnector.getOverlays({
......@@ -369,6 +438,13 @@ EditProjectDialog.prototype.refreshOverlays = function() {
});
};
EditProjectDialog.prototype.refreshUsers = function() {
var self = this;
return ServerConnector.getUsers().then(function(users) {
return self.setUsers(users);
});
};
EditProjectDialog.prototype.setOverlays = function(overlays) {
var self = this;
self._overlayById = [];
......@@ -385,6 +461,49 @@ EditProjectDialog.prototype.setOverlays = function(overlays) {
});
};
EditProjectDialog.prototype.setUsers = function(users) {
var self = this;
self._userByLogin = [];
return self.createUserPrivilegeColumns().then(function(columns) {
var dataTable = $($("[name='usersTable']", self.getElement())[0]).DataTable();
var data = [];
for (var i = 0; i < users.length; i++) {
var user = users[i];
self._userByLogin[user.getLogin()] = user;
var rowData = self.userToTableRow(user, columns);
data.push(rowData);
}
dataTable.clear().rows.add(data).draw();
});
};
EditProjectDialog.prototype.userToTableRow = function(user, columns) {
var self = this;
var row = [];
var login = user.getLogin();
row[0] = user.getName() + " " + user.getSurname() + " (" + login + ")";
for (var i = 1; i < columns.length; i++) {
var column = columns[i];
if (column.privilegeType !== undefined) {
if (column.privilegeType.getValueType() === "boolean") {
var checked = '';
if (user.hasPrivilege(column.privilegeType, self.getProject().getId())) {
checked = 'checked';
}
row[i] = "<input type='checkbox' name='privilege-" + login + "' data='" + column.privilegeType.getName() + "' "
+ checked + "/>";
} else {
throw new Error("Unsupported type: " + column.privilegeType.getValueType());
}
}
}
row.push("<button name='saveUser' data='" + login + "'>SAVE</button>");
return row;
};
EditProjectDialog.prototype.overlayToTableRow = function(overlay, users) {
var row = [];
var id = overlay.getId();
......@@ -492,6 +611,11 @@ EditProjectDialog.prototype.saveOverlay = function(overlayId) {
return ServerConnector.updateOverlay(overlay);
};
EditProjectDialog.prototype.saveUser = function(login) {
return Promise.reject(Error("not implemented"));
};
EditProjectDialog.prototype.removeOverlay = function(overlayId) {
var self = this;
return ServerConnector.removeOverlay({
......
"use strict";
var ObjectWithListeners = require('../../ObjectWithListeners');
function PrivilegeType(data, name) {
// call super constructor
ObjectWithListeners.call(this);
var self = this;
self.setName(name);
self.setCommonName(data.commonName);
self.setObjectType(data.objectType);
self.setValueType(data.valueType);
}
PrivilegeType.prototype = Object.create(ObjectWithListeners.prototype);
PrivilegeType.prototype.constructor = PrivilegeType;
PrivilegeType.prototype.setObjectType = function(objectType) {
this._objectType = objectType;
};
PrivilegeType.prototype.getObjectType = function() {
return this._objectType;
};
PrivilegeType.prototype.setValueType = function(valueType) {
this._valueType = valueType;
};
PrivilegeType.prototype.getValueType = function() {
return this._valueType;
};
PrivilegeType.prototype.setCommonName = function(commonName) {
this._commonName = commonName;
};
PrivilegeType.prototype.getCommonName = function() {
return this._commonName;
};
PrivilegeType.prototype.setName = function(name) {
this._name = name;
};
PrivilegeType.prototype.getName = function() {
return this._name;
};
module.exports = PrivilegeType;
......@@ -88,6 +88,18 @@ User.prototype.getPrivileges = function() {
return this._privileges;
};
User.prototype.hasPrivilege = function(type, objectId) {
for (var i = 0; i < this._privileges.length; i++) {
var privilege = this._privileges[i];
if (privilege.type === type.getName()) {
if (objectId === privilege.objectId) {
return privilege.value > 0;
}
}
}
return false;
};
User.prototype.update = function(user) {
this.setLogin(user.getLogin());
this.setName(user.getName());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment