Skip to content
Snippets Groups Projects
Commit 44062daf authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '860-fix-whoami-query' into 'master'

Resolve "Fix whoAmI query" (and make permission query poll)

Closes #860

See merge request !1250
parents 2f97c0ff 903d3d6d
No related branches found
No related tags found
1 merge request!1250Resolve "Fix whoAmI query" (and make permission query poll)
Pipeline #129240 failed
......@@ -23,6 +23,7 @@ Fixed
* The search bar in the sidenav menu is shown even though the user has no permission to see it.
* Add permission check to accept invitation menu point in order to hide it when this feature is disabled.
* Metrics endpoint for Prometheus was at the wrong URL.
* Polling behavior of the whoAmI and permission queries was fixed.
`3.0`_ - 2022-05-11
-------------------
......
......@@ -246,12 +246,17 @@ export default {
systemProperties: gqlSystemProperties,
whoAmI: {
query: gqlWhoAmI,
pollInterval: 30000,
result({ data }) {
if (data && data.whoAmI) {
this.$root.permissions = data.whoAmI.permissions;
}
},
variables() {
return {
permissions: this.permissionNames,
permissions: this.$root.permissionNames,
};
},
pollInterval: 10000,
},
messages: {
query: gqlMessages,
......
<template>
<v-navigation-drawer app :value="value" height="100dvh" @input="$emit('input', $event)">
<v-navigation-drawer
app
:value="value"
height="100dvh"
@input="$emit('input', $event)"
>
<v-list nav dense shaped>
<v-list-item class="logo">
<a
......@@ -111,7 +116,7 @@ export default {
},
mixins: [permissionsMixin],
mounted() {
this.fetchPermissions(["core.search_rule"]);
this.addPermissions(["core.search_rule"]);
},
};
</script>
......
query gqlPermissions($permissions: [String]!) {
whoAmI {
permissions: globalPermissionsByName(permissions: $permissions) {
name
result
}
}
}
query whoAmI {
query whoAmI($permissions: [String]!) {
whoAmI {
username
isAuthenticated
......@@ -12,5 +12,9 @@ query whoAmI {
avatarUrl
isDummy
}
permissions: globalPermissionsByName(permissions: $permissions) {
name
result
}
}
}
......@@ -71,6 +71,7 @@ const app = new Vue({
snackbarItems: [],
toolbarTitle: "AlekSIS®",
permissions: [],
permissionNames: [],
}),
computed: {
matchedComponents() {
......
......@@ -37,7 +37,7 @@ const menusMixin = {
}
}
this.fetchPermissions(permArray);
this.addPermissions(permArray);
},
buildMenu(routes, menuKey) {
let menu = {};
......
......@@ -5,17 +5,6 @@ import gqlPermissions from "../components/app/permissions.graphql";
*/
const permissionsMixin = {
apollo: {
permissions: {
query: gqlPermissions,
update(data) {
this.$root.permissions = data.whoAmI.permissions;
},
variables: {
permissions: [],
},
},
},
methods: {
checkPermission(permissionName) {
return (
......@@ -24,30 +13,16 @@ const permissionsMixin = {
this.$root.permissions.find((p) => p.name === permissionName).result
);
},
fetchPermissions(permissionNames) {
this.$apollo.queries.permissions.fetchMore({
variables: {
permissions: permissionNames,
},
updateQuery: (previousResult, { fetchMoreResult }) => {
const oldPermissions = previousResult.whoAmI.permissions;
const newPermissions = fetchMoreResult.whoAmI.permissions;
const keepPermissions = oldPermissions.filter(
(oldPermission) =>
!newPermissions.find(
(newPermission) => newPermission.name === oldPermission.name
)
);
addPermissions(newPermissionNames) {
const keepPermissionNames = this.$root.permissionNames.filter(
(oldPermName) =>
!newPermissionNames.find((newPermName) => newPermName === oldPermName)
);
return {
whoAmI: {
__typename: previousResult.whoAmI.__typename,
permissions: [...keepPermissions, ...newPermissions],
},
};
},
});
this.$root.permissionNames = [
...keepPermissionNames,
...newPermissionNames,
];
},
},
};
......
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