Skip to content
Snippets Groups Projects
Commit 903d3d6d authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Fix polling and updating behavior of whoAmI and permission queries

parent 58c94519
No related branches found
No related tags found
1 merge request!1250Resolve "Fix whoAmI query" (and make permission query poll)
Pipeline #129236 failed
......@@ -22,6 +22,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
......@@ -110,7 +115,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
}
}
}
......@@ -73,6 +73,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