Skip to content

Commit cfc73c1

Browse files
authored
Frontend privileges. 2nd iteration (#753)
* help points to our itisfoundation.github.io * typo * Do not show Debug level in logger to User and Anon * Do not show nodeIds in NodesTree to User and Anon * Tester and higher level roles can switch their role to a lower one
1 parent 57c704a commit cfc73c1

File tree

6 files changed

+87
-26
lines changed

6 files changed

+87
-26
lines changed

services/web/client/source/class/qxapp/component/widget/NewGHIssue.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ qx.Class.define("qxapp.component.widget.NewGHIssue", {
3535
env += "\n```";
3636
const body = encodeURIComponent(temp+env);
3737
let url = "https://github.com/ITISFoundation/osparc-simcore/issues/new";
38-
url += "?labels=tester_review,UX_improvemnts";
38+
url += "?labels=tester_review,UX_improvements";
3939
url += "&projects=ITISFoundation/3";
4040
url += "&body=" + body;
4141
return url;

services/web/client/source/class/qxapp/component/widget/NodeTreeItem.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,13 @@ qx.Class.define("qxapp.component.widget.NodeTreeItem", {
6464
flex: 1
6565
});
6666

67-
// Add a NodeId
68-
var nodeIdWidget = new qx.ui.basic.Label();
69-
this.bind("nodeId", nodeIdWidget, "value");
70-
nodeIdWidget.setMaxWidth(250);
71-
this.addWidget(nodeIdWidget);
67+
if (qxapp.data.Permissions.getInstance().canDo("study.nodestree.uuid.read")) {
68+
// Add a NodeId
69+
const nodeIdWidget = new qx.ui.basic.Label();
70+
this.bind("nodeId", nodeIdWidget, "value");
71+
nodeIdWidget.setMaxWidth(250);
72+
this.addWidget(nodeIdWidget);
73+
}
7274
}
7375
}
7476
});

services/web/client/source/class/qxapp/component/widget/logger/LoggerView.js

+40-15
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,17 @@
4141
* </pre>
4242
*/
4343

44-
const LOG_LEVEL = {
45-
debug: -1,
46-
info: 0,
47-
warning: 1,
48-
error: 2
49-
};
44+
const LOG_LEVEL = [
45+
{
46+
debug: -1
47+
}, {
48+
info: 0
49+
}, {
50+
warning: 1
51+
}, {
52+
error: 2
53+
}
54+
];
5055
Object.freeze(LOG_LEVEL);
5156

5257
qx.Class.define("qxapp.component.widget.logger.LoggerView", {
@@ -79,8 +84,9 @@ qx.Class.define("qxapp.component.widget.logger.LoggerView", {
7984
apply : "__applyFilters",
8085
nullable: false,
8186
check : "Number",
82-
init: LOG_LEVEL.debug
87+
init: LOG_LEVEL[0].debug
8388
},
89+
8490
caseSensitive: {
8591
nullable: false,
8692
check : "Boolean",
@@ -115,14 +121,24 @@ qx.Class.define("qxapp.component.widget.logger.LoggerView", {
115121

116122
const part = new qx.ui.toolbar.Part();
117123
const group = new qx.ui.form.RadioGroup();
118-
for (let level in LOG_LEVEL) {
124+
let logLevelSet = false;
125+
for (let i=0; i<LOG_LEVEL.length; i++) {
126+
const level = Object.keys(LOG_LEVEL[i])[0];
127+
const logLevel = LOG_LEVEL[i][level];
128+
if (level === "debug" && !qxapp.data.Permissions.getInstance().canDo("study.logger.debug.read")) {
129+
continue;
130+
}
119131
const label = level.charAt(0).toUpperCase() + level.slice(1);
120132
const button = new qx.ui.form.ToggleButton(label).set({
121133
appearance: "toolbar-button"
122134
});
123-
button.logLevel = LOG_LEVEL[level];
135+
button.logLevel = logLevel;
124136
group.add(button);
125137
part.add(button);
138+
if (!logLevelSet) {
139+
this.setLogLevel(logLevel);
140+
logLevelSet = true;
141+
}
126142
}
127143
group.addListener("changeValue", e => {
128144
this.setLogLevel(e.getData().logLevel);
@@ -155,27 +171,29 @@ qx.Class.define("qxapp.component.widget.logger.LoggerView", {
155171
resizeBehavior.setWidth(0, "15%");
156172
resizeBehavior.setWidth(1, "85%");
157173

174+
this.__applyFilters();
175+
158176
return table;
159177
},
160178

161179
debug: function(who = "System", what = "") {
162-
this.__addLog(who, what, LOG_LEVEL.debug);
180+
this.__addLog(who, what, LOG_LEVEL[0].debug);
163181
},
164182

165183
info: function(who = "System", what = "") {
166-
this.__addLog(who, what, LOG_LEVEL.info);
184+
this.__addLog(who, what, LOG_LEVEL[1].info);
167185
},
168186

169187
infos: function(who = "System", whats = [""]) {
170-
this.__addLogs(who, whats, LOG_LEVEL.info);
188+
this.__addLogs(who, whats, LOG_LEVEL[1].info);
171189
},
172190

173191
warn: function(who = "System", what = "") {
174-
this.__addLog(who, what, LOG_LEVEL.warning);
192+
this.__addLog(who, what, LOG_LEVEL[2].warning);
175193
},
176194

177195
error: function(who = "System", what = "") {
178-
this.__addLog(who, what, LOG_LEVEL.error);
196+
this.__addLog(who, what, LOG_LEVEL[3].error);
179197
},
180198

181199
__addLog: function(who = "System", what = "", logLevel = 0) {
@@ -246,7 +264,14 @@ qx.Class.define("qxapp.component.widget.logger.LoggerView", {
246264
},
247265

248266
__addLevelColorTag: function(what, logLevel) {
249-
const keyStr = String(qxapp.utils.Utils.getKeyByValue(LOG_LEVEL, logLevel));
267+
let keyStr = "info";
268+
for (let i=0; i<LOG_LEVEL.length; i++) {
269+
const level = Object.keys(LOG_LEVEL[i])[0];
270+
if (LOG_LEVEL[i][level] === logLevel) {
271+
keyStr = level;
272+
break;
273+
}
274+
}
250275
const logColor = qxapp.theme.Color.colors["logger-"+keyStr+"-message"];
251276
return ("<font color=" + logColor +">" + what + "</font>");
252277
},

services/web/client/source/class/qxapp/data/Permissions.js

+20-1
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,29 @@ qx.Class.define("qxapp.data.Permissions", {
8383
members: {
8484
__userRole: null,
8585

86+
getRole() {
87+
return this.__userRole;
88+
},
89+
8690
setRole(role) {
8791
if (!this.self().ROLES[role]) {
8892
return;
8993
}
9094
this.__userRole = role;
9195
},
9296

97+
getLowerRoles(role) {
98+
const lowerRoles = [];
99+
for (const r in this.self().ROLES) {
100+
if (r === role) {
101+
break;
102+
} else {
103+
lowerRoles.push(r);
104+
}
105+
}
106+
return lowerRoles;
107+
},
108+
93109
__getInitPermissions: function() {
94110
return {
95111
"anonymous": [
@@ -116,7 +132,10 @@ qx.Class.define("qxapp.data.Permissions", {
116132
"study.edge.delete"
117133
],
118134
"tester": [
119-
"services.all.read"
135+
"services.all.read",
136+
"preferences.role.update",
137+
"study.nodestree.uuid.read",
138+
"study.logger.debug.read"
120139
],
121140
"moderator": [],
122141
"admin": []

services/web/client/source/class/qxapp/desktop/NavigationBar.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ qx.Class.define("qxapp.desktop.NavigationBar", {
204204
newIssueBtn.addListener("execute", this.__onOpenNewIssueV0, this);
205205
menu.add(newIssueBtn);
206206
const helpBtn = new qx.ui.menu.Button(this.tr("Help"));
207-
helpBtn.addListener("execute", () => window.open("https://forum.zmt.swiss/"));
207+
helpBtn.addListener("execute", () => window.open("https://itisfoundation.github.io"));
208208
menu.add(helpBtn);
209209
const aboutBtn = new qx.ui.menu.Button(this.tr("About"));
210210
aboutBtn.addListener("execute", () => qxapp.About.getInstance().open());

services/web/client/source/class/qxapp/desktop/preferences/pages/ProfilePage.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,24 @@ qx.Class.define("qxapp.desktop.preferences.pages.ProfilePage", {
5656
placeholder: this.tr("Last Name")
5757
});
5858

59-
const role = new qx.ui.form.TextField().set({
60-
readOnly: true
61-
});
59+
let role = null;
60+
if (qxapp.data.Permissions.getInstance().canDo("preferences.role.update")) {
61+
role = new qx.ui.form.SelectBox();
62+
const roles = qxapp.data.Permissions.getInstance().getLowerRoles();
63+
for (let i=0; i<roles.length; i++) {
64+
const roleItem = new qx.ui.form.ListItem(roles[i]);
65+
role.add(roleItem);
66+
role.setSelection([roleItem]);
67+
}
68+
role.addListener("changeSelection", function(e) {
69+
const newRole = e.getData()[0].getLabel();
70+
qxapp.data.Permissions.getInstance().setRole(newRole);
71+
}, this);
72+
} else {
73+
role = new qx.ui.form.TextField().set({
74+
readOnly: true
75+
});
76+
}
6277

6378
const form = new qx.ui.form.Form();
6479
form.add(email, "", null, "email");

0 commit comments

Comments
 (0)