feat(editor): Add routing middleware, permission checks, RBAC store, RBAC component (#7702)

Github issue / Community forum post (link here to close automatically):

---------

Co-authored-by: Csaba Tuncsik <csaba@n8n.io>
This commit is contained in:
Alex Grozav
2023-11-23 13:22:47 +02:00
committed by GitHub
parent fdb2c18ecc
commit 67a88914f2
62 changed files with 1935 additions and 646 deletions

View File

@@ -1,27 +1,30 @@
import type { IPermissions } from '@/Interface';
import { isAuthorized } from '@/utils';
import { useUsersStore } from '@/stores/users.store';
import { defineComponent } from 'vue';
import type { RouteLocation } from 'vue-router';
import { hasPermission } from '@/rbac/permissions';
import type { RouteConfig } from '@/types/router';
import type { PermissionTypeOptions } from '@/types/rbac';
export const userHelpers = defineComponent({
methods: {
canUserAccessRouteByName(name: string): boolean {
canUserAccessRouteByName(name: string) {
const route = this.$router.resolve({ name });
return this.canUserAccessRoute(route);
},
canUserAccessCurrentRoute(): boolean {
canUserAccessCurrentRoute() {
return this.canUserAccessRoute(this.$route);
},
canUserAccessRoute(route: RouteLocation): boolean {
const permissions: IPermissions = route.meta?.permissions;
const usersStore = useUsersStore();
const currentUser = usersStore.currentUser;
canUserAccessRoute(route: RouteLocation & RouteConfig) {
const middleware = route.meta?.middleware;
const middlewareOptions = route.meta?.middlewareOptions;
return permissions && isAuthorized(permissions, currentUser);
if (!middleware) {
return true;
}
return hasPermission(middleware, middlewareOptions as PermissionTypeOptions | undefined);
},
},
});